2017-09-26 185 views
0

我一直在嘗試這麼多不同的變體來使AES_Decrypt正常工作。我開始使用字段類型VARBINARY然後嘗試BLOB但仍然沒有運氣,不斷返回NULL。最後,我想這:MySQL AES_Decrypt無法正常工作

SELECT AES_DECRYPT(AES_ENCRYPT('blah blah blah','1234'), '1234') as test 

這在技術上應該已經恢復等等等等,而是它返回

626c616820626c616820626c6168 

所以不知道是怎麼回事還是什麼我做錯了。

我已經插入加密數據如下:

INSERT INTO private (short_name, mobile, name) 
VALUES (
    'AS1', 
    AES_ENCRYPT('0111222333','1234'), 
    AES_ENCRYPT('My Name','1234') 
) 

然後我嘗試解密它是這樣的:

SELECT AES_DECRYPT('mobile', '1234') AS mobile FROM private 

它只是似乎沒有工作。遵循很多在線說明,但仍然沒有運氣。

任何想法?

回答

0
SELECT AES_DECRYPT(AES_ENCRYPT('blah blah blah','1234'), '1234') as test 

返回二進制字符串作爲輸出。如果你將它轉換爲字符串,那麼它將等於等等等等。您可以使用在線十六進制到二進制轉換器來驗證它。您必須將其設置爲GUI工具中的文本。

+0

我嘗試使用在線二進制轉換器轉換的字符串,但所有的給出錯誤。是不是應該有一種方式來將它作爲文本返回,而不必單獨將其轉換爲文本 – Ahmed

+0

好吧,我似乎需要把它像這樣:SELECT CAST(AES_DECRYPT(AES_ENCRYPT('等等等等','1234'),'' 1234')AS CHAR(150)) – Ahmed

+0

使用此鏈接進行轉換。 http://string-functions.com/hex-string.aspx – Jack

0

所以看來我需要使用CAST,除非使用mysql命令行客戶端。

所以這樣做似乎工作:

SELECT CAST(AES_DECRYPT(AES_ENCRYPT('blah blah blah','1234'), '1234') AS CHAR (150))