2

我正在使用以下代码来加密一些字符串:

$value = 'somevalue';
$key = Configure::read('Security.salt');

$encrypted = Security::cipher($value,$key);
$decrypted = Security::cipher($encrypted,$key);

它工作正常,它可以正确加密/解密。但我无法在数据库中保存加密值 - 我将字段 encrypted_data 的值设置为数据库中此字段中没有任何内容$encrypted之后。save()当我将 $encrypted 更改为例如 'string' 时,它会将 'string' 正确保存到'encrypted_data'.

所以问题可能是加密字符串包含一些数据库不接受的奇怪字符 - 我该如何解决?(使用带有 utf-8 的 mysql 数据库)

4

2 回答 2

3

您也许可以base64_encode($encrypted)在加密之后、存储到数据库base64_decode($encrypted)之前以及解密之前使用。

于 2013-06-09T22:52:47.723 回答
1

问题是您VARCHAR不支持这些字符。相反,您应该将列更改VARBINARY为支持 UTF 字符集之外的字符。

于 2013-03-16T17:28:54.967 回答