我使用openssl来加密文本,然后把它放到mysql数据库中。 这工作正常,但是对于长文本,解密的文本会损坏。使用openssl数据损坏mysql
我个人认为这是由于mysql将这些文本保存到数据库中的方式,在加密文本中有很多不是字母数字字符。但我不确定这一点。 另外我不知道在mysql中使用哪种排序规则,现在我将它设置为* utf8_unicode_ci *,但仍然存在数据损坏。
一个活生生的例子可以看这里:http://todolist.x10.mx
Username: example
Password: password
要查看损坏的数据,单击Download Backup
。
下面的代码当然是$encrypted
保存到数据库中。此代码工作正常,没有数据库。
<?php
$source = 'very long text';
$iv = "1234567812345678";
$pass = 'difficultpassphrase';
$method = 'aes-256-ofb';
$encrypted = openssl_encrypt ($source, $method, $pass, true, $iv);
echo $encrypted;
$decrypted = openssl_decrypt ($encrypted, $method, $pass, true, $iv);
echo $decrypted;
?>
预先感谢您的时间和专业知识。
我使用base64_encode/decode,正如你所提到的那样,仍然存在。非常聪明的想法,但。 我使用base64_encode的mysql_real_escape_string,也许这是导致可溶性?我认为这不太可能。 mysql_real_escape_string(base64_encode($ encrypted)) 通过将字段设置为二进制或varbinary,字段长度自动变为1,当我尝试使其变大时我收到一个错误。 我将其设置回blob – user1557314
我发现问题:我在显示笔记之前执行了stripslashes()。 – user1557314