为什么$每次加密的内容都不同?
// 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 =
答案 0 :(得分:5)
PKCS#1加密算法使用一些随机种子来使密码文本每次都不同。
这可以保护密文免受多种攻击,如频率分析,密文匹配。例如,如果您使用公钥来加密所有密码而没有随机性。所有相同的密码将产生相同的密文。有人可以通过检查密文的频率来找出所有流行的密码。
对于对称密钥加密,IV(初始向量)用于类似目的。