gpt4 book ai didi

php - 使用 mcrypt、PHP 和 MySQL 进行加密

转载 作者:行者123 更新时间:2023-11-29 09:10:26 24 4
gpt4 key购买 nike

我正在尝试使用 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(加密密码),并使用用户名重新创建 key 。

这可行,但只是有时有效。我不明白为什么。我唯一的假设是数据库无法接受加密产生的某些字符,例如引号。

任何帮助将不胜感激!

最佳答案

$salt = time(); // I would use something other than time(), something more random

// store it in the db and redirect user
connect();
$query = mysql_query("INSERT INTO user VALUES
('".mysql_real_escape_string($username)."',
'".mysql_real_escape_string(sha1($password . $salt))."',
'".mysql_real_escape_string($salt)."') ");

// returning user
$username = $_POST['username'];
$password = $_POST['password'];

// retrieve stored password
connect();
$result = mysql_query("SELECT * FROM user WHERE username = '".mysql_real_escape_string($username)."' ");
$row = mysql_fetch_assoc($result);
if (!$result) {
// user doesn't exist
}
$storedPassword = $row['password'];
$salt = $row['salt'];

$hashedPassword = sha1($password . $salt);

if ($storedPassword != $hashedPassword) {
// exit
}
else {
// redirect user
}

我并不是说这是最安全的,它只是用盐进行单向散列的一个小例子。

关于php - 使用 mcrypt、PHP 和 MySQL 进行加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5757838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com