使用openssl_public_encrypt加密的数据每次都不同?

时间:2010-06-05 10:37:09

标签: php encryption openssl rsa

为什么$每次加密的内容都不同?

// 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 个答案:

答案 0 :(得分:5)

PKCS#1加密算法使用一些随机种子来使密码文本每次都不同。

这可以保护密文免受多种攻击,如频率分析,密文匹配。例如,如果您使用公钥来加密所有密码而没有随机性。所有相同的密码将产生相同的密文。有人可以通过检查密文的频率来找出所有流行的密码。

对于对称密钥加密,IV(初始向量)用于类似目的。