我正在尝试对使用 MCRYPT 制作的一些随机字符串进行编码和解码,但它们无法正确解码。
这是我用来编码字符串的函数:
function m_encrypt($key, $text, $iv) {
return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
}
如您所见,它需要我编写的预定义“密钥”、要编码的文本和在单独文件中创建的 iv。然后它加密数据并返回。
这是将字符串插入数据库的函数:
$sth = $dbh->prepare('INSERT INTO randomStrings(random_string, iv) VALUES (:random_string, :iv)');
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$rows = 50;
for($i = 0; $i < $rows; $i++) {
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$randString = get_random_string($chars, 20);
$randString = m_encrypt($key, $randString, $iv);
$sth->bindParam(':random_string', $randString);
$sth->bindParam(':iv', $iv);
$sth->execute();
}
我只是将字符串和 iv 插入数据库。
接下来,我尝试使用以下方法读取编码的字符串:
function m_decrypt($key, $text, $iv) {
return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
}
类似于encode函数,但相反。
最后,尝试解密字符串的文件如下所示:
$sth = $dbh->prepare('SELECT * FROM randomStrings');
$sth->execute();
while($result = $sth->fetch(PDO::FETCH_ASSOC)) {
echo m_decrypt($key, $result['random_string'], $result['iv']);
echo '<br/>';
}
结果总是一些任意的字符集,例如
í,eHGxC•z»@”“§``
我知道这是不对的,因为我已将随机字符串生成中使用的字符限制为简单的 az 和 0-9,因此这不可能是正确的解码,感谢任何帮助。