2017-04-09 37 views
-1

下面是MySQL的架構中的字符串:我需要知道爲什麼下面的MySQL不給我,我AES_ENCRYPTed

CREATE TABLE prevent(
    remoteAddr TINYBLOB NOT NULL, 
    logTime TINYBLOB NOT NULL 
)ENGINE=InnoDB; 
INSERT prevent VALUES (
    AES_ENCRYPT('just a lame test','[email protected]#r'), 
    AES_ENCRYPT(NOW(),'b$Do^rK32C') 
); 

現在簡單的查詢:

SELECT AES_DECRYPT(remoteAddr,'[email protected]#r') remoteAddr, 
    AES_DECRYPT(logTime,'b$Do^rK32C') logTime FROM prevent; 

但看看結果這裏:http://sqlfiddle.com/#!9/3c507a/3

我的問題是,爲什麼這些AES_DECRYPT值與我插入的字符串不一樣?

+0

的SQLFiddle導致你看到的是由SQLFiddle造成*使用base64編碼,因爲AES_DECRYPT的'輸出類型()'總是一滴,不串顯示*輸出,所以就就其而言,這些值可能與有效字符不相關,因此不應該如此處理(並顯示)。 MySQL並沒有真的返回這些值。 –

回答

-1

試試這個:

SELECT CAST(AES_DECRYPT(remoteAddr,'[email protected]#r')AS CHAR(50)) remoteAddr, 
    CAST(AES_DECRYPT(logTime,'b$Do^rK32C')AS CHAR(50)) logTime FROM prevent; 
+3

爲什麼試試這個?爲什麼這個工作? – Martin

+0

,因爲AES_DECRYPT方法在您的情況下返回二進制字符串。 – Nidhi257

+0

你知道PHP的mysqli是否會自動轉換二進制字符串,因爲當我用mysqli使用這種技術時,我不需要CAST? – PHPglue

相關問題