我使用以下代码加密某些字符串:
$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数据库)
答案 0 :(得分:2)
您可以在加密后和存储到数据库之前使用base64_encode($encrypted)
,在解密之前使用base64_decode($encrypted)
。
答案 1 :(得分:1)
问题是您的VARCHAR
不支持这些字符。相反,您应该将列更改为VARBINARY
以支持UTF字符集之外的字符。