mysql aes_MYSQL AES加密与解密函数使用
最近在做項目的時候,需要對一個數字串進行加密,但是加密密文又需要可以可以逆轉,因此不能使用md5或sha之類的,只能用aes或des。翻了資料,嘗試了在php層進行加密解密,用到了php的加密函數庫,但是發現及時每次使用相同的明文和密鑰進行aes加密,得到的密文每次都不一樣,但是解密時卻能得到相同的明文。這就是aes的好處。在PHP層將數字串進行加密,完后插入到表中,這完全是正確的。但是判斷表中這個數字串是否存在就難搞了,因為使用相同的明文和密鑰運算出來的密文跟上次不一樣。這樣的話,SELECT * FROM table WHERE column = ?,這個參數的值就肯定配對不上,找不到記錄。也有另外一個方法,把表中的記錄都拿出來,通過循環解密再與傳入的參數進行配對,但是這樣不好,每次檢查都要遍歷表和循環解密,估計內存和CPU會掛掉。無奈之下,只好到數據庫層找找辦法。
那就在MySQL這一層試試,發現MySQL也有aes加密的函數,盡管試試。實驗完,發現MySQL的實現與php的不一樣,MySQL中每次出來的密文都相同。雖然這樣看起來不太妥,但是先這樣辦。其中有個不同的地方是,MySQL的aes函數加密出來的字符串是二進制的,需要轉成16進制才能插入到表中。
-- AES加密
SELECT AES_ENCRYPT('1234567890123456','abcdefgh');
-- AES解密
SELECT AES_DECRYPT(AES_ENCRYPT('1234567890123456','abcdefgh') ,'abcdefgh') ;
-- AES加密后進行轉成16進制
SELECT HEX(AES_ENCRYPT('1234567890123456','abcdefgh'));
-- AES加密后進行轉成16進制,再轉二進制進行解密
SELECT AES_DECRYPT(UNHEX(HEX(AES_ENCRYPT('1234567890123456','abcdefgh'))),'abcdefgh');
分享到:
2012-06-18 10:31
瀏覽 10095
分類:數據庫
評論
總結
以上是生活随笔為你收集整理的mysql aes_MYSQL AES加密与解密函数使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机银行app跨行转账收手续费吗
- 下一篇: 农行50万大额转账怎么转 农业银行怎么转