我需要知道为什么下面的MySQL没有给我我加密的字符串

我需要知道为什么下面的MySQL没有给我我加密的字符串,mysql,Mysql,以下是MySQL的模式: CREATE TABLE prevent( remoteAddr TINYBLOB NOT NULL, logTime TINYBLOB NOT NULL )ENGINE=InnoDB; INSERT prevent VALUES ( AES_ENCRYPT('just a lame test','Wt@F4z5u#r'), AES_ENCRYPT(NOW(),'b$Do^rK32C') ); 现在简单查询: SELECT AES_DECRYPT(re

以下是MySQL的模式:

CREATE TABLE prevent(
  remoteAddr TINYBLOB NOT NULL,
  logTime TINYBLOB NOT NULL
)ENGINE=InnoDB;
INSERT prevent VALUES (
  AES_ENCRYPT('just a lame test','Wt@F4z5u#r'),
  AES_ENCRYPT(NOW(),'b$Do^rK32C')
);
现在简单查询:

SELECT AES_DECRYPT(remoteAddr,'Wt@F4z5u#r') remoteAddr, 
  AES_DECRYPT(logTime,'b$Do^rK32C') logTime FROM prevent;
但看看这里的结果:

我的问题是,为什么这些AES_解密值与我插入的字符串不同?

试试这个:

SELECT CAST(AES_DECRYPT(remoteAddr,'Wt@F4z5u#r')AS CHAR(50)) remoteAddr,
  CAST(AES_DECRYPT(logTime,'b$Do^rK32C')AS CHAR(50)) logTime FROM prevent;

因为AES_DECRYPT方法在您的案例中返回一个二进制字符串。您知道PHP的mysqli是否会自动转换二进制字符串,因为当我将此技术用于mysqli时,我不必强制转换。谢谢。我在想。虽然您的回答含糊不清,但它为我指出了正确的方向。您看到的SQLFiddle结果是由SQLFiddle使用base64编码显示输出引起的,因为就其而言,
AES_DECRYPT()
的输出类型始终是blob,而不是string,这些值可能与有效字符不相关,因此不应如此处理(和显示)。MySQL并没有真正返回这些值。