Данные, зашифрованные с помощью openssl_public_encrypt, каждый раз отличаются? - PullRequest
3 голосов
/ 05 июня 2010

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

// 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

и $ Transfer - это всегда другая строка: ...

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

mRgLPsPtMoV9la7zzuU + cLzS5xMDp7QUmH6Iv4Sv4 / FNjt62zcv9ZMWkfG3uVhS8Z1UDtGl + met1CYjBTcfjHCR6hahbwOkTCICXtkRQcc371vURW04XhQzMNgIIbvN5BBdmIyYI6alrS2vKUq7b3T0h8sJf36zh5CynYzyDCFU =

G5FhMoJGiUwEBvEOeZpDDrEXdxbWX5iaJ6F + VdYJ3CURPRMftskZNlDhat8gA5V0G + 3nXVQZptkHjxMkOqPlmwJHjgIqAiFppHLpEKohyT9qNwkAR00Y6PiWrNUJPiEIZqXHAb8TS0AA0Quhc0UAwcc + I8NGOD59k8BrZE6Z5Ew =

1 Ответ

5 голосов
/ 05 июня 2010

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

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

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

...