2017-04-09 92 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

相关问题