我想在单击encrypt button
后加密原始字符串,inputs元素将不清除,在单击decrypt
后它将decrypt
。我的问题是,当我单击decrypt
后,只有加密正在移动,decrypt
没有值。有人能帮我吗?
这是我单击decrypt
后的输出。
这是我的密码。
<?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>
最佳答案
这一部分有两个逻辑缺陷:
if(isset($_POST['encrypt'])){
$string = $_POST['ostring'];
$encrypted_string = ...;
}
else if(isset($_POST['decrypt'])){
$decrypted_string = ...$encrypted_string...;
}
$decrypted_string
永远不会被设置,因为它依赖于$encrypted_string
。但是,如果执行路径进入第一个cc块并跳过,则只存在。此外,在加密之前,即使需要,也不会检查
$encrypted_string
是否可用将两个执行路径放在单独的
if
块中:if(isset($_POST['encrypt'],$_POST['ostring'])){
$encrypted_string = ...;
}
if(isset($_POST['decrypt'],$encrypted_string)){
$decrypted_string = ...;
}