使用 mcrypt 解密存储在服务器上的密码
Decrypting passwords that are stored on server with mcrypt
所以我有一个 table 使用 MCRYPT_RIJNDAEL_128 加密在 varbinary 下加密用户名和密码。我可以很好地存储加密的详细信息,但我在解密它们时遇到问题。我在用户注册时存储用户名、密码和 IV。
$query = "INSERT INTO users ( username, password ) VALUES ( :user, :pass) ";
$encrypt_user = $_POST['username'];
$encrypt_pass = $_POST['password'];
$encrypted_user = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $encrypt_user, MCRYPT_MODE_CBC, $iv);
$encrypted_pass = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $encrypt_pass, MCRYPT_MODE_CBC, $iv);
$encrypted_cardnumber = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key,
$query_params = array(
':user' => $encrypted_user,
':pass' => $encrypted_pass,
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
}
这个存储一切正常,问题是我什么时候要解密。如何获取登录用户的 IV?我曾尝试在用户注册时将 iv 设置为会话变量,但我知道这仅在用户首次注册然后登录时有效。
$query = "SELECT id, username FROM users WHERE username = :username";
$username = $_POST['username'];
$password = $_POST['password'];
//encrypting the username and password to compare to the ones stored in the databaase
$encrypted_username = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $username, MCRYPT_MODE_CBC, $iv);
$encrypted_password = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $password, MCRYPT_MODE_CBC, $iv);
只是不要加密用户名,因为这不是敏感信息。但是您应该将方法从加密更改为散列。因为使用 IV 和 secret_key 可以解密密码。
所以我有一个 table 使用 MCRYPT_RIJNDAEL_128 加密在 varbinary 下加密用户名和密码。我可以很好地存储加密的详细信息,但我在解密它们时遇到问题。我在用户注册时存储用户名、密码和 IV。
$query = "INSERT INTO users ( username, password ) VALUES ( :user, :pass) ";
$encrypt_user = $_POST['username'];
$encrypt_pass = $_POST['password'];
$encrypted_user = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $encrypt_user, MCRYPT_MODE_CBC, $iv);
$encrypted_pass = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $encrypt_pass, MCRYPT_MODE_CBC, $iv);
$encrypted_cardnumber = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key,
$query_params = array(
':user' => $encrypted_user,
':pass' => $encrypted_pass,
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
}
这个存储一切正常,问题是我什么时候要解密。如何获取登录用户的 IV?我曾尝试在用户注册时将 iv 设置为会话变量,但我知道这仅在用户首次注册然后登录时有效。
$query = "SELECT id, username FROM users WHERE username = :username";
$username = $_POST['username'];
$password = $_POST['password'];
//encrypting the username and password to compare to the ones stored in the databaase
$encrypted_username = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $username, MCRYPT_MODE_CBC, $iv);
$encrypted_password = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $password, MCRYPT_MODE_CBC, $iv);
只是不要加密用户名,因为这不是敏感信息。但是您应该将方法从加密更改为散列。因为使用 IV 和 secret_key 可以解密密码。