現在資訊行業對個資法/隱密資料很多都需要用到加解密存取技術,

而MariaDB有提供幾種加密方式,

MariaDB 10.1可作資料表/庫加密,

是使用類似於linux硬碟加密的方式進行.(有空在記錄)

而MariaDB 5.5則只有欄位加密,

方式還蠻多的,請參閱 Encryption, Hashing and Compression Functions

個人選擇之後,覺得des_encrypt/des_decrypt + des key file最方便開發管理且key的隱密性較高,

使用之前需要先啟用MaraiDB SSL/TLS,

再啟用服務時需指定--des-key-file參數,來指定金鑰檔,

金鑰檔的格是,如下

key_num_1 key_value_1
key_num_2 key_value_2

 

經過DES加密的字串長度變化,
new_len = orig_len + (8 - (orig_len % 8)) + 1

Example:
SELECT LENGTH(DES_ENCRYPT('kerker', 0)), LENGTH(DES_ENCRYPT('123456789', 0))
結果
LENGTH(DES_ENCRYPT('kerker', 0))    LENGTH(DES_ENCRYPT('123456789', 0))
9                                                                17
6+(8-(6%8))+1=9                                      9+(8-(9%8))+1=17

 

使用上的眉角

des_encrypt(str, key_str)  -(必須)-> des_decrypt(str, key_str) 

des_encrypt(str, key_num)  -(必須)-> des_decrypt(str)

就算key_num對應的key_str相同,

也不可以使用des_encrypt(str, key_num)  --> des_decrypt(str, key_str) 

另外一點,

des_encrypt(str, no_exist_key_num)  --> des_decrypt(str)   照樣解的出來,

把資料複製到另一台使用不同的key file的instance,

則原instance 使用des_encrypt(str, no_exist_key_num) 加密的資料,

在另一台des_decrypt(str)居然也解的出來.

這邊我猜測加密時,找不到key_num時,會使用一把預設的key,這把key在所有instance都是存在且相同.

最好加密時使用明確key_num.

 

參考

Des_encrypt

arrow
arrow
    文章標籤
    encrypt des_encrypt mariadb 5.5
    全站熱搜
    創作者介紹
    創作者 abcg5 的頭像
    abcg5

    Aaron Yang

    abcg5 發表在 痞客邦 留言(0) 人氣()