【发布时间】:2011-08-11 02:23:02
【问题描述】:
我正在尝试使用 mcrypt 在我的数据库中存储密码。首先,它有效,但仅在某些时候有效。
这是我的加密代码:
//Encryption/Decryption key
$key = $username.$username.$username.$username.$username;
//Encryption Algorithm
$cipher_alg = MCRYPT_RIJNDAEL_256;
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg, MCRYPT_MODE_ECB), MCRYPT_RAND);
$password = mcrypt_encrypt($cipher_alg, $key, $pass1, MCRYPT_MODE_CBC, $iv);
然后将 $username、$iv 和 $password 上传到 MySQL 数据库。
这是我的解密代码:
//Encryption/Decryption key
$key = $username.$username.$username.$username.$username;
//Encryption Algorithm
$cipher_alg = MCRYPT_RIJNDAEL_256;
$dbpass = mcrypt_decrypt($cipher_alg, $key, $encpass, MCRYPT_MODE_CBC, $random);
$dbpass = trim($dbpass); // Trim the fat
从数据库中检索 $username、$iv 和 $encpass(加密密码)并使用用户名重新创建密钥。
这可行,但只是有时。我不知道为什么。我唯一的假设是数据库不能接受加密产生的某些字符,例如引号。
任何帮助将不胜感激!
【问题讨论】:
-
请向我们展示您用于将数据插入数据库的代码,以及用于检索数据的代码。我们还需要知道表的结构。另外,为什么你在 ECB 模式下获取 IV,但在 CBC 模式下加密?
-
据我所知,算法取决于密钥和 IV 大小,用户名既不能用于传递也不能用于密钥.. 你不能依赖用户输入!!
标签: php mysql encryption mcrypt