Шифрование и расшифровка AES


Я хочу зашифровать исходную строку после того, как я нажму encrypt button, и элемент inputs не будет очищен, а после того, как я нажму decrypt, он будет decrypt. Моя проблема в том, что после того, как я нажму decrypt, для decrypt не будет значения, только шифрование перемещается. Может ли кто-нибудь помочь мне в этом?

Вот результат после того, как я нажму decrypt. 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>
Author: Alive to Die, 2016-07-19

1 answers

В этой части есть 2 логических недостатка:

if(isset($_POST['encrypt'])){
    $string = $_POST['ostring'];
    $encrypted_string = ...;
}
else if(isset($_POST['decrypt'])){
    $decrypted_string = ...$encrypted_string...;
}
  1. $decrypted_string никогда не будет установлен, потому что он полагается на $encrypted_string. Но $encrypted_string существует только в том случае, если путь выполнения входит в первый блок if и пропускает блок elseif.
  2. Кроме того, вы никогда не проверяете, доступен ли ostring перед шифрованием, даже если это необходимо

Поместите два пути выполнения в отдельные блоки if:

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

if(isset($_POST['decrypt'],$encrypted_string)){
    $decrypted_string = ...;
}
 1
Author: BeetleJuice, 2016-07-19 04:59:04