我使用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