PHP的Mysql和Mcrypt问题

How*_*opa 5 php mysql mcrypt

我已经看过几次了,但不知道我将如何在这里问它...希望你们好.

基本上我有这个脚本工作正常,将毫不费力地打印我的结果:

$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
Run Code Online (Sandbox Code Playgroud)

太棒了.现在......而不是只是立即输出我输入的内容,我试图将该信息存储在我的数据库中以便稍后解密.

我可以在表格行中看到加密的字符串:6m3D5qSrfz3w6pKuuybs.所以,我相信它会很好......

当我查询它出来时它看起来是一样的,但现在当我解码和解密时我会得到类似的东西:ÝÄ/ $ÍñËt05883700

表字段设置为VARCHAR(255)utf8_general_ci.这是问题所在吗?

Nul*_*ion 5

您确定在加密和解密时使用相同的初始化向量(IV)吗?

请注意,您还需要保存IV并在解密时使用它.也不要rtrim()在密文上使用.

话虽这么说,您可以使用BINARY(或VARBINARY)字段来存储您的密文(和IV),因此您不需要对其进行base64编码.它将为您节省33%的存储空间.