用openssl_public_encrypt加密的数据每次都不同? [英] Data encrypted with openssl_public_encrypt is different every time?
问题描述
为什么每次$加密的内容不同?
//从服务器获取公钥
$ 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 =要加密的字符串;
openssl_public_encrypt($ plaintext,$ encrypted,$ publicKey);
$ transfer = base64_encode($ encrypted);
openssl_private_decrypt($ encrypted,$ decryptpted,$ privateKey);
echo $ transfer; //加密的字符串
和$ transfer是每一个不同的字符串:...
'p> Z1xyMUquARxcGjqjjSHNAm41CnHI02GXxLyFivvta8YhDkhRJdD4i3kx + 8GElljdiSY / NMF9UD3ritWMLGmscdq / QyIf + geYxJFePNd1dNWg + V6zbAKRLaEpsU + aB87jiM / GjytLEkI63dku02BS0ZBgz9UZw / FDNaynV5bTTDM =
mRgLPsPtMoV9la7zzuU + cLzS5xMDp7QUmH6Iv4Sv4 / FNjt62zcv9ZMWkfG3uVhS8Z1UDtGl + met1CYjBTcfjHCR6hahbwOkTCICXtkRQcc371vURW04XhQzMNgIIbvN5BBdmIyYI6alrS2vKUq7b3T0h8sJf36zh5CynYzyDCFU =
G5FhMoJGiUwEBvEOeZpDDrEXdxbWX5iaJ6F + VdYJ3CURPRMftskZNlDhat8gA5V0G + 3nXVQZptkHjxMkOqPlmwJHjgIqAiFppHLpEKohyT9qNwkAR00Y6PiWrNUJPiEIZqXHAb8TS0AA0Quhc0UAwcc + I8NGOD59k8BrZE6Z5Ew =
在PKCS#1加密算法使用一些随机种子来使每个密文不同。
保护密码免受几种攻击,如频率分析,密文匹配。例如,如果您使用公钥加密所有密码而不随机。所有相同的密码将产生相同的密文。有人可以通过检查密码的频率来找出所有流行的密码。
对于对称密钥加密,IV(初始向量)用于类似的目的。 p>
why is the content of $encrypted every time different?
// 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);
also I have tried this one
$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
and $transfer is everytime a different string:...
Z1xyMUquARxcGjqjjSHNAm41CnHI02GXxLyFivvta8YhDkhRJdD4i3kx+8GElljdiSY/NMF9UD3ritWMLGmscdq/QyIf+geYxJFePNd1dNWg+V6zbAKRLaEpsU+aB87jiM/GjytLEkI63dku02BS0ZBgz9UZw/FDNaynV5bTTDM=
mRgLPsPtMoV9la7zzuU+cLzS5xMDp7QUmH6Iv4Sv4/FNjt62zcv9ZMWkfG3uVhS8Z1UDtGl+met1CYjBTcfjHCR6hahbwOkTCICXtkRQcc371vURW04XhQzMNgIIbvN5BBdmIyYI6alrS2vKUq7b3T0h8sJf36zh5CynYzyDCFU=
G5FhMoJGiUwEBvEOeZpDDrEXdxbWX5iaJ6F+VdYJ3CURPRMftskZNlDhat8gA5V0G+3nXVQZptkHjxMkOqPlmwJHjgIqAiFppHLpEKohyT9qNwkAR00Y6PiWrNUJPiEIZqXHAb8TS0AA0Quhc0UAwcc+I8NGOD59k8BrZE6Z5Ew=
The PKCS#1 encryption algorithm uses some random seed to make the cipher-text different every time.
This protects the cipher-text against several attacks, like frequency analysis, ciphertext matching. For example, if you were using a public key to encrypt all your password without randomness. All the same password will yield the same cipher-text. Someone can figure out all the popular passwords by checking the frequency of the cipher-text.
For symmetric key encryption, IV (Initial Vector) serves a similar purpose.
这篇关于用openssl_public_encrypt加密的数据每次都不同?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!