我想加密访问令牌,并在某个时刻解密它。在CentOS上使用mcrypt_decrypt时出现如下奇怪的字符:
我的表的内容是这样的:
UPDATE users SET access_token = AES_ENCRYPT('adummyaccesstoken', '123456789') WHERE id = 1;
我以下列方式使用mysql的AES_ENCRYPT()的内置函数:
try{
$user = "root";
$pass = "";
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
}
catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
$statement = $dbh->prepare("SELECT * FROM `users` WHERE id = 1");
$statement->execute();
$row = $statement->fetch(PDO::FETCH_ASSOC);
$row['decrypted_token'] = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, '123456789', $row['access_token'], MCRYPT_MODE_ECB));
var_dump($row);
在WAMP的结果是这样的:
array (size=5)
'id' => string '1' (length=1)
'firstname' => string 'Pim' (length=3)
'lastname' => string 'van der Wal' (length=11)
'access_token' => string 'Äk„
vl¢Þ?ÍØ%tkѲúiLï4]«~Ô‡íW' (length=32)
'decrypted_token' => string 'adummyaccesstoken' (length=32)
我对CentOS上运行的web应用程序应用了相同的方法。
$decryptToken = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, '123456789', $this->accessToken, MCRYPT_MODE_ECB));
echo $decryptToken;
结果:
��m�N��kA��%+��q���/��Ĝx��ϐۊ�e �/+�d�@vU��
问题 我不明白为什么在这样一个奇怪的方式返回的代码。我怀疑读取解密的令牌时,这与字符集不匹配有关。
任何帮助表示赞赏。
你必须使用htmlentity_encode /解码。将编码数据存储在数据库中并在解码之前在浏览器上显示 – Monty
我试过'rtrim()',问题依然存在。 –
类似的问题:http://forums.phpfreaks.com/topic/123592-mcrypt-decrypt-not-returning-original-string-returning-weird-data-no-errors/ –