1. 程式人生 > >mysql通過儲存過程實現aes加解密

mysql通過儲存過程實現aes加解密

前言:資料庫難免會存一些敏感資料,密碼可以用不可逆演算法,但是有些東西本來就需要可逆,比如使用者銀行卡號、身份證號、手機號等,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許可權