Данные, зашифрованные с помощью открытого шифрования openssl, каждый раз разные?


Почему содержимое $зашифровано каждый раз по-разному?

// aquire public key from server
$server_public_key = openssl_pkey_get_public(file_get_contents("C:\publickey.pem"));

// rsa encrypt
openssl_public_encrypt("123", $encrypted, $server_public_key);

Также я пробовал этот

$publicKey = "file://C:/publickey.pem";
$privateKey = "file://C:/privatekey.pem";
$plaintext = "String to encrypt";

openssl_public_encrypt($plaintext, $encrypted, $publicKey);
$transfer = base64_encode($encrypted);
openssl_private_decrypt($encrypted, $decrypted, $privateKey);

echo $transfer;  //encrypted string

И перевод $ каждый раз отличается строка:...

Z1xyMUquARxcGjqjjSHNAm41CnHI02GXxLyFivvta8YhDkhRJdD4i3kx+8GElljdiSY/NMF9UD3ritWMLGmscdq/QyIf+geYxJFePNd1dNWg+V6zbAKRLaEpsU+aB87jiM/GjytLEkI63dku02BS0ZBgz9UZw/FDNaynV5bTTDM=

MRgLPsPtMoV9la7zzuU+cLzS5xMDp7QUmH6Iv4Sv4/FNjt62zcv9ZMWkfG3uVhS8Z1UDtGl+met1CYjBTcfjHCR6hahbwOkTCICXtkRQcc371vURW04XhQzMNgIIbvN5BBdmIyYI6alrS2vKUq7b3T0h8sJf36zh5CynYzyDCFU=

G5FhMoJGiUwEBvEOeZpDDrEXdxbWX5iaJ6F+VdYJ3CURPRMftskZNlDhat8gA5V0G+3nXVQZptkHjxMkOqPlmwJHjgIqAiFppHLpEKohyT9qNwkAR00Y6PiWrNUJPiEIZqXHAb8TS0AA0Quhc0UAwcc+I8NGOD59k8BrZE6Z5Ew=

Author: Ned Batchelder, 2010-06-05

1 answers

Алгоритм шифрования PKCS#1 использует некоторое случайное начальное значение, чтобы каждый раз шифровать текст по-разному.

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

Для симметричного ключа шифрование, IV (Начальный вектор) служит аналогичной цели.

 5
Author: ZZ Coder, 2010-06-05 11:24:52