我使用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;
?>
提前感谢您的时间和专业知识。
答案 0 :(得分:0)
要以二进制形式存储加密内容,您不能使用带编码的字符类型,因为编码很可能会“破坏”您的数据。
您应该使用BINARY or VARBINARY数据类型,它们完全是为了存储二进制数据。
替代方法是在将数据存储到字符数据类型之前base64_encode数据,并在从数据库中提取数据时base64_decode数据。这将对数据进行编码,以便加密数据可以存储在varchar / char数据类型中(尽管它会使数据稍长一些,所以要注意这一点)