mysql通過儲存過程實現aes加解密
阿新 • • 發佈:2019-02-13
前言:資料庫難免會存一些敏感資料,密碼可以用不可逆演算法,但是有些東西本來就需要可逆,比如使用者銀行卡號、身份證號、手機號等,mysql自身提供了AES_ENCRYPT、AES_DECRYPT來實現aes的加解密,但是利用格式為AES_ENCRYPT('需要加密的字元','加解密用的key'),如果在程式碼層直接呼叫的話就會導致把key寫的到處都是,那肯定不是大家想要的效果,於是這裡自己搞了個儲存過程,封裝下原有的,將key寫在function裡,這樣非資料庫root許可權的賬戶就無法獲取key的內容了
定義加密儲存過程(需要先指定資料庫):
mysql> DELIMITER $$ mysql> mysql> DROP FUNCTION IF EXISTS en_aes$$ Query OK, 0 rows affected (0.00 sec) mysql> CREATE FUNCTION en_aes(en_str VARCHAR(255)) -> RETURNS VARCHAR(255) -> DETERMINISTIC -> begin -> return hex(AES_ENCRYPT(en_str,'key')); -> end$$ Query OK, 0 rows affected (0.00 sec) mysql> DELIMITER ;
定義解密儲存過程(需要先指定資料庫):
mysql> DELIMITER $$ mysql> DROP FUNCTION IF EXISTS de_aes$$ Query OK, 0 rows affected (0.00 sec) mysql> CREATE FUNCTION de_aes(de_str VARCHAR(255)) -> RETURNS VARCHAR(255) -> DETERMINISTIC -> begin -> return AES_DECRYPT(unhex(de_str),'key'); -> end$$ Query OK, 0 rows affected (0.00 sec) mysql> DELIMITER ;
定義好後就可以通過select en_aes('xxxxxxx');看下效果,如果正常返回了加密後的字串就成功了
需要注意的一點是,普通許可權使用者使用儲存過程需要新增execute許可權