2016-07-19 3 views
0

У меня есть файл с тремя php: index.php, где есть исходная строка, encrypt.php где я буду шифровать исходную строку и, наконец, decrypt.php, где я ее расшифрую, но проблема в том, когда я пытаюсь расшифровать ее, результат все равно зашифрован но не тот же шифр, который отличается. Может кто-нибудь помочь мне в расшифровке?AES - Зашифрованная строка не расшифровывается.

здесь картина я нажимаю Шифровать

enter image description here

здесь зашифрованная. enter image description here

здесь расшифрованный это проблема, на выходе должно быть "fwf2", но это разные enter image description here

вот код для index.php

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<form method="POST" action="encrypt.php"> 
Original String <input type="text" name="text"> 
<input type="submit" name="encrypt" value="Encrypt" href="encrypt.php"> 
</form> 
</body> 
</html> 

здесь является encrypt.php

<?php 
$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['text']; 

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

} 


?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<form method="POST" action="decrypt.php"> 
Encrypted String <input type="text" style="width:500px;" name="encrypted" value="<?php echo $encrypted_string; ?>"> 
<input type="submit" name="decrypt" value="Decrypt" href="decrypt.php"> 
</body> 
</html> 

вот decrypt.php

<?php 
$secret_key = "thisismykey12345"; 
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND); 

if(isset($_POST['decrypt'])){ 

    $encrypted_string = $_POST['encrypted']; 
    $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" action="encrypt.php"> 
Decrypted String <input type="text" name="decrypted" style="width:500px;" value="<?php echo $decrypted_string ?>"> 
</body> 
</html> 
+0

Вы, кажется, обрабатываете зашифрованные данные, как будто это текст, его нет, его двоичные данные. Чтобы обрабатывать это как текст (т. Е. Передавать его в HTTP-запросах, необходимо его кодировать/декодировать, например Base64) –

+0

FYI Вы должны избегать ECB & MCRYPT_RIJNDAEL_256 не AES 256 –

+0

@Alex K. то какой тип алгоритма шифрования сэр? – nethken

ответ

0

я нашел ответ здесь -> Best way to use PHP to encrypt and decrypt passwords?

здесь код index.php

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<form method="POST" action="encrypt.php"> 
Original String <input type="text" name="text"> 
<input type="submit" name="encrypt" value="Encrypt" href="encrypt.php"> 
</form> 
</body> 
</html> 

encrypt.php

<?php 
$iv = mcrypt_create_iv(
    mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), 
    MCRYPT_DEV_URANDOM 
); 
if(isset($_POST['encrypt'])){ 
$key = "thisismykey12345"; 
$string = $_POST['text']; 

$encrypted = base64_encode(
    $iv . 
    mcrypt_encrypt(
     MCRYPT_RIJNDAEL_128, 
     hash('sha256', $key, true), 
     $string, 
     MCRYPT_MODE_CBC, 
     $iv 
    ) 
); 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<form method="POST" action="decrypt.php"> 
Encrypted String <input type="text" style="width:500px;" name="encrypted" value="<?php echo $encrypted; ?>"> 
<input type="submit" name="decrypt" value="Decrypt" href="decrypt.php"> 
</body> 
</html> 

decrypt.php

<?php 
$key = "thisismykey12345"; 

if(isset($_POST['decrypt'])){ 
$encrypted = $_POST['encrypted']; 

$data = base64_decode($encrypted); 
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)); 

$decrypted = rtrim(
    mcrypt_decrypt(
     MCRYPT_RIJNDAEL_128, 
     hash('sha256', $key, true), 
     substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)), 
     MCRYPT_MODE_CBC, 
     $iv 
    ), 
    "\0" 
); 
} 

?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<form method="POST" action="encrypt.php"> 
Decrypted String <input type="text" name="decrypted" style="width:500px;" value="<?php echo $decrypted; ?>"> 
</body> 
</html> 
2

Вы должны повторно использовать капельницу, чтобы иметь вещи инициализируются таким же образом, для шифрования и дешифрования:

// Encryption 
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
$iv_enc = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
$str_enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 'thisismykey12345', 'hallops', MCRYPT_MODE_CBC, $iv_enc); 
$encrypted = $iv_enc . $str_enc; 

// Decryption 
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 

$iv_dec = substr($encrypted, 0, $iv_size); // Extract iv 
$str_dec = substr($encrypted, $iv_size); // Extract encrypted string 

echo mcrypt_decrypt(
    MCRYPT_RIJNDAEL_256, 
    'thisismykey12345', 
    $str_dec, 
    MCRYPT_MODE_CBC, 
    $iv_dec 
); 
--> hallops 

Обратите внимание на способ IV и зашифрованные данные сцепляются и «посланный» вместе.

Как и другие люди, есть вещи, которые могут потребоваться, если это нужно отправить где-то, а некоторые алгоритмы шифрования более безопасны, чем другие.

Редактировать: http://php.net/mcrypt_encrypt объясняет эти вещи более подробно в примерах.

+0

Спасибо (написано примеры: P) –

+0

Спасибо за внимание сэр. – nethken