我已经看过几次了,但不知道我将如何在这里问这个问题......希望你和我们一起做好。
基本上我有这个脚本可以正常工作,并且会毫不费力地打印我的结果:
$algorithm = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_CFB;
$iv = mcrypt_create_iv(mcrypt_get_iv_size($algorithm, $mode), MCRYPT_DEV_URANDOM);
$key = 'Wassup';
$data = 'I am a guy';
$enc_data = rtrim(mcrypt_encrypt($algorithm,$key,$data,$mode,$iv));
$plain_text = base64_encode($enc_data);
echo $plain_text . "\n";
// OUTPUTS: 6m3D5qSrfz3w6pKuuybs
$enc_data = base64_decode($plain_text);
$decoded = mcrypt_decrypt($algorithm,$key,$enc_data,$mode,$iv);
echo $decoded;
// OUTPUTS: I am a guy
这很完美。现在......而不是只是立即输出我输入的内容,我试图将该信息存储在我的数据库中以便稍后解密。
我可以在表格行中看到加密的字符串:6m3D5qSrfz3w6pKuuybs。所以,我确信它会很好......
当我查询它时它看起来是一样的, 但现在当我解码和解密时,我会得到类似的东西:ÝÄ/ $ÍñËt05883700
表字段设置为VARCHAR(255)utf8_general_ci。这是问题所在吗?
答案 0 :(得分:5)
您确定在加密和解密时使用相同的初始化向量(IV)吗?
请注意,您还需要保存IV并在解密时使用它。也不要在密文上使用rtrim()
。
话虽如此,您可以使用BINARY
(或VARBINARY
)字段来存储您的密文(和IV),因此您无需对其进行base64编码。它可以节省33%的存储空间。