php-用openssl_public_encrypt加密的数据每次都不同吗?

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

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

mRgLPsPtMoV9la7zzuU cLzS5xMDp7QUmH6Iv4Sv4 / FNjt62zcv9ZMWkfG3uVhS8Z1UDtGl met1CYjBTcfjHCR6hahbwOkTCICXtkRQcc371vUyHYZYKYYB1QY2Y6Y3Y2Y3Y2Y6Y3Y2Y6Y2Y2Y2Y2Y6Y3Y2Y2Y2Y2Y2Y2Y7Y2Y6Y7Y2Y7Y2Y6Y7Y2Y6Y7Y7Y7Y2J6Y

G5FhMoJGiUwEBvEOeZpDDrEXdxbWX5iaJ6F VdYJ3CURPRMftskZNlDhat8gA5V0G 3nXVQZptkHjxMkOqPlmwJHjgIqAiFppHLpEKohyT9qNwkAR9Y6ZWZ0Z6ZWZ0Z6Z

解决方法:

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

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

对于对称密钥加密,IV(初始向量)起类似的作用.

上一篇:java-在SecretKey上调用.getEncoded()返回null


下一篇:php-加密静态数据