AES加密和解密

3
我希望在点击加密按钮后加密原始字符串,输入元素不会清除,点击解密后将进行解密。我的问题是,在我点击解密后,解密没有值,只有加密在移动。有人可以帮助我吗?
以下是单击解密后的输出。 enter image description here 这是我的代码。
<?php
/*
 * PHP mcrypt - Basic encryption and decryption of a string
 */
error_reporting(E_ALL ^ E_NOTICE);
$secret_key = "thisismykey12345";
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);

if(isset($_POST['encrypt'])){
    $string = $_POST['ostring'];

$encrypted_string = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secret_key, $string, MCRYPT_MODE_CBC, $iv);

}
else if(isset($_POST['decrypt'])){
    $decrypted_string = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secret_key, $encrypted_string, MCRYPT_MODE_CBC, $iv);

}

?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<form method="post"> 
Original String <input type="text" name="ostring" value="<?php echo $string; ?>"><br>
<input type="submit" name="encrypt" value="Encrypt"><br>
Encrypted String <input type="text" style="width:500px;" name="encrypted" value="<?php echo $encrypted_string; ?>"><br>
<input type="submit" name="encrypt" value="Decrypt"><br>
Decrypted String <input type="text" style="width:500px" name="decrypted" value="<?php echo $decrypted_string; ?>"><br>
</form> 
</form>
</body>
</html>

问题在于每次点击提交按钮时,您的所有数据都会被重新提交和加密,再次进行加密。 - Alive to die - Anant
人们没有回应,很难过。 - Alive to die - Anant
1个回答

1
这部分有两个逻辑缺陷:
if(isset($_POST['encrypt'])){
    $string = $_POST['ostring'];
    $encrypted_string = ...;
}
else if(isset($_POST['decrypt'])){
    $decrypted_string = ...$encrypted_string...;
}
  1. $decrypted_string将永远不会设置,因为它依赖于$encrypted_string。但是,只有在执行路径进入第一个if块并跳过elseif块时,$encrypted_string才存在。
  2. 此外,在加密之前,您从未检查ostring是否可用,尽管它是必需的。

将两个执行路径放在单独的if块中:

if(isset($_POST['encrypt'],$_POST['ostring'])){
    $encrypted_string = ...;
}

if(isset($_POST['decrypt'],$encrypted_string)){
    $decrypted_string = ...;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接