用openssl_public_encrypt加密的数据每次都不同? [英] Data encrypted with openssl_public_encrypt is different every time?

查看:1416
本文介绍了用openssl_public_encrypt加密的数据每次都不同?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  //从服务器获取公钥
$ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆