使用Security :: Cipher将加密数据存储在数据库中

时间:2012-05-09 08:42:32

标签: mysql cakephp cakephp-2.0

我使用以下代码加密某些字符串:

$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数据库)

2 个答案:

答案 0 :(得分:2)

您可以在加密后和存储到数据库之前使用base64_encode($encrypted),在解密之前使用base64_decode($encrypted)

答案 1 :(得分:1)

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