mysql對敏感資訊資料加解密 工作筆記

2021-09-18 06:25:03 字數 1661 閱讀 1137

為保證使用者資訊保安,對所有涉及到使用者敏感資訊的字段(比如手機號)在資料庫中都要進行密文儲存。

既然需求來了那麼自然而然要提出解決方案。經過討論提出了兩種加解密方案:

aes加解密方案:aes_encrypt() / aes_decrypt()

des加解密方案:des_encrypt() / des_decrypt()

比如對phone欄位進行加密,那就在資料庫中新增兩個字段:phone_aes,phone_des,字段型別:varbinary(32)

方案提出後交由測試部門對兩種方案進行壓測實驗,測試部門給出的壓測結論是:

update對比:加密和未加密的整體tps變化不大,且aes加密比des的效能表現優異,都比不加密稍差。

insert對比:加密比未加密插入的tps稍低一些,且aes的tps、cpu占用等比des好。

select對比:使用aes加密、des加密查詢效能都稍差於未加密,aes的cpu等指標強於des。

總結:使用aes加密相對不加密的效能變化不大,且aes略好於des加密方式的效能。

具體如何壓測請自行搞定,這裡只提供個思路:

測試目標

測試資料庫對欄位加解密的效能

測試物件

tablename

資料量8000w(根據自己資料量而定)

測試場景

phone_number欄位:1. 不加密,2. aes加密,3. des加密

測試內容

1. 測試insert語句效能 2. 測試select語句效能 3. 測試update語句效能

//解密

aes_decrypt(phone_aes, #) as phone_number

//加密

aes_encrypt(#, #')

那麼問題來了,我以前開發過的專案都由我來進行改造,粗略一查四五個專案多個字段好幾百處使用。這麼搞會死人的啊,而且時間緊迫。那怎麼辦呢?

於是乎,我想到了mybatis的全域性變數,首先在mybatis.xml中新增配置:

$

//解密

aes_decrypt(phone_aes, '$') as phone_number

//加密

aes_encrypt(#,'$')

最後說下遇到的坑:

1.如果解密後字段中包含中文會出現中文亂碼,解決方案:

convert(aes_decrypt(name_aes,'$') using utf8) as name

2.加密後的資料無法在mysql中直接存入varchar型別的字段中,我們採用的字段型別是varbinary直接儲存二進位制。那麼問題來了加密後對應的長度關係是什麼呢?

答案:漢字utf-8編碼格式下加密後,對應varbinary型別3個字元長度。

英文和數字加密後,對應varbinary型別1個字元長度。

資料加密 RSA 加解密

對於rsa加解密來說,在ios的api中同樣也是提供了這兩種形式的方法。seckeyencrypt 加密 seckeydecrypt 解密 複製 openssl 同樣也提供了一系列的方法 rsa public encrypt rsa private encrypt rsa public decryp...

DESC結合Aop對銘感資料註解式加解密

1.引入aop依賴 org.springframework.boot spring boot starter aop 2.自定義註解,使用aspect 對傳入資料加密,出參解密 author zhenglong description desc加解密字段 date 2020 11 26 9 32 t...

C 使用DES加解密資料

分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!c 的des加解密,同時支援.net與.net cf 2.0平台,這樣就可以把乙個封裝好的類同時用在pc wm手機上。c 的des比其他語言的des演算法多了個iv實現,其實iv可以設定為...