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