PHPでは、action.php
ページがあり、変数に格納される文字列があります
$myString = "Foo Bar";
次の関数で AES256 を使用してこの文字列を暗号化しています。
function aes256Encrypt($key, $data) {
if(32 !== strlen($key)) $key = hash('SHA256', $key, true);
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, str_repeat("\0", 16));
}
MySQLデータベースにデータを挿入するmysql_real_escape_string()
前に、DBに挿入する前に暗号化された文字列を使用しています
私の知る限り、mysql_real_escape_string()
関数は\
エスケープする必要がある文字の前に追加します!
一方、MySQL からデータを取得し、この関数を使用して復号化する必要があります。
function aes256Decrypt($key, $data) {
if(32 !== strlen($key)) $key = hash('SHA256', $key, true);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, str_repeat("\0", 16));
$padding = ord($data[strlen($data) - 1]);
return substr($data, 0, -$padding);
}
すべて問題ありません。db から取得した文字列を復号化すると、正しい文字列が返されますが、DB から取得した後に文字列をエスケープ解除せずに正しく機能する方法について、本当に混乱しますか?