使用mysql的PHP无法解密字符串(字符串来自数据库)


PHP with mysql fails to decrypt a string (string comes from the database)

我在这里没有看到这个问题(mysql是密钥,而不仅仅是加密/解密问题)。

当md5加密的字符串不是来自mysql数据库时,相同的php代码成功地解密了它。不使用mysql,字符串既加密又解密成功。我在两种情况下都使用相同的解密代码。

1)字符串被加密并保存到mysql 中

2) 加密的字符串随后被拉出并试图被解密和显示。

3) mysql版本-解密失败(输出->ef32b9252e40bc9e228744923e33393b)。不使用mysql–(输出"团队")

<?php
// version #1 – mysql version
$encrypted = "team";
// encrypt the string $encrypted
$key = md5(date('l jS of F Y h i s A'));
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $encrypted, MCRYPT_MODE_CBC, md5(md5($key))));**
// Of course here would be the INSERT…..
// So now “team” is in the mysql database encrypted.
$userid = "bob";
$query = "select team from league where username = '".$userid."'";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
    $encrypted = trim($row['team']);
}
// decrypt the string $encrypted
$key = md5(date('l jS of F Y h i s A'));
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "'0");
print  $decrypted;   //outputs -> ef32b9252e40bc9e228744923e33393b
// Version #2 - non mysql
$encrypted  = "team"    // Not from mysql DB.
// encrypt the string $encrypted
$key = md5(date('l jS of F Y h i s A'));
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $encrypted, MCRYPT_MODE_CBC, md5(md5($key))));
// decrypt the string $encrypted
$key = md5(date('l jS of F Y h i s A'));
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "'0");
print  $decrypted;   //outputs -> team

?>

如果我正确理解了这个问题,那么问题在于您使用MCRYPT_RIJNDAEL_256

来自PHP 中的AES-256加密

AES-256不同于RIJNDAEL-256。AES中的256表示密钥大小,而RIJNDAEL中的256则表示块大小。与256位密钥一起使用时,AES-256是RIJNDAEL-128。