差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 下次修改 Both sides next revision | ||
java:jasypt [2016/01/14 21:02] tony |
java:jasypt [2016/01/14 23:47] tony [Problem] |
||
---|---|---|---|
行 2: | 行 2: | ||
====== Jasypt ====== | ====== Jasypt ====== | ||
===== Problem ===== | ===== Problem ===== | ||
- | 使用這個API的目的主要是為了無痛去加解密資料庫的某個欄位,且它支援Hibernate、Spring的整合方式。 | + | 使用這個API的目的主要是為了無痛去加解密資料庫的某個欄位,且它支援Hibernate、Spring的整合方式。但最後發現,要無痛是很困難的,除非只是很單純的加密像密碼的東西。 |
===== How to? ===== | ===== How to? ===== | ||
==== 安裝Java Cryptography Extension (JCE) ==== | ==== 安裝Java Cryptography Extension (JCE) ==== | ||
行 13: | 行 13: | ||
</code> | </code> | ||
=== 最簡單的方式 === | === 最簡單的方式 === | ||
- | 只要在hbm檔內,將你要加密的欄位設定一下就搞定了。 | + | 只要在hbm檔內,將你要加密的欄位設定一下就搞定了。\\ |
- | \\Hibernate設定: | + | Hibernate設定: |
<code xml> | <code xml> | ||
<hibernate-mapping> | <hibernate-mapping> | ||
行 30: | 行 30: | ||
</hibernate-mapping> | </hibernate-mapping> | ||
</code> | </code> | ||
+ | 支援的algorithm可以參考此[[http://www.jasypt.org/cli.html|連結]]。 | ||
=== 使用自己的Encryptor === | === 使用自己的Encryptor === | ||
Hibernate設定: | Hibernate設定: | ||
行 79: | 行 80: | ||
</code> | </code> | ||
==== Known Issue ==== | ==== Known Issue ==== | ||
- | 目前已知使用Hibernate設定criteria搜尋,又或者是HQL搭配NameParam的方式,都會經過Encryptor。但如果使用Jasypt所提供的Password Base相關的加密方式,所產生的密文每次都會不同。如果你所加密的欄位是你要搜尋的對象,變成你必須自行處理,也可能因此產生performance問題。如果自行寫Encryptor去產生一樣的密文,就會比較不安全。該怎麼決擇就由你自行決定了。\\ | + | 目前已知使用Hibernate設定criteria搜尋,又或者是HQL搭配NameParam的方式,都會經過Encryptor。但有以下問題: |
- | 還有無法使用模糊比對去找加密過後的欄位。因為片段加密後,不一定是密文中的片段。 | + | - 密文不固定: 使用Jasypt所提供的Password Base相關的加密方式,所產生的密文每次都會不同。如果加密的欄位是要搜尋的對象,變成必須自行處理,也可能因此產生效能問題。如果自行寫Encryptor去產生一樣的密文,就會比較不安全。該怎麼決擇就由你自行決定了。 |
+ | - 無法模糊比對: 難以使用模糊比對去找加密過後的欄位。因為片段加密後,不一定是密文中的片段。 | ||
+ | - 加密型態非預期: 舉例來說,物件類別為long,而DB為big int。而Jasypt提供的類別為EncryptedLongAsStringType,會將內容轉為string。我的測試是MySQL正常,但Postgres會有無法insert的問題;而Jasypt文件就有提到,Long對應的SQL type為VARCHAR, CLOB, TEXT。因此如果要支援,非常可能要自己做Encryptor。 | ||
===== Reference ===== | ===== Reference ===== | ||
* [[http://www.jasypt.org/hibernate.html|Jasypt與Hibernate的整合]] | * [[http://www.jasypt.org/hibernate.html|Jasypt與Hibernate的整合]] |