Unix 为什么RSA加密文本会为同一文本提供不同的结果

Unix 为什么RSA加密文本会为同一文本提供不同的结果,unix,terminal,cryptography,openssl,rsa,Unix,Terminal,Cryptography,Openssl,Rsa,我使用RSA加密,使用openSSL加密数据,效果很好。我对RSA的理解是,使用相同的公钥加密相同的数据将始终得到相同的结果(或) 然而,使用openssl,我每次重复加密都会得到不同的结果。 例如: ➜ ~ echo '30' | openssl rsautl -encrypt -inkey pub.pem -pubin | shasum 11b6e058273df1ebe0be5e0596e07a6c51724ca0 - ➜ ~ echo '30' | openss

我使用RSA加密,使用openSSL加密数据,效果很好。我对RSA的理解是,使用相同的公钥加密相同的数据将始终得到相同的结果(或)

然而,使用openssl,我每次重复加密都会得到不同的结果。 例如:

➜  ~  echo '30' | openssl rsautl -encrypt -inkey pub.pem -pubin  | shasum
      11b6e058273df1ebe0be5e0596e07a6c51724ca0  -

➜  ~  echo '30' | openssl rsautl -encrypt -inkey pub.pem -pubin  | shasum
      05cb82595f7429ef196189f4e781088597d90eee  -
那么,为什么输出不是唯一的呢?是因为我把RSA加密搞错了,还是因为openssl带来了一些额外的魔力


实际上,我正在尝试设计一个只存储RSA加密数据的数据库。我想搜索加密信息的哈希和,如果加密过程本身不是唯一的,这是不可能的

好的,我知道了。RSA本身是确定性的。
然而,为了获得更好的安全性并防止攻击者猜测加密信息,加密不是在纯“数据”上进行的,而是在“数据”+“一些随机模式”(

使用适当的填充方案实现安全RSA加密,其中包括一些随机性。有关更多详细信息,请参阅或


RSA加密使用“0”和一个随机位字符串对消息进行加密。在此过程中,随机字符串通过加密哈希和XORing“隐藏”在密文中。在解密时,RSA解密从密文中恢复随机字符串,并使用它来恢复消息。这就是为什么对于同一条文本消息,使用openssl rsautl会得到不同的结果。

FWIW,rsautil被贬低,而不仅仅是猜测加密信息。即使信息是不可用的(比如128位密钥),不使用适当的填充方案也会导致严重的弱点。即使仍然流行的PKCS#1 v1.5方案也很弱。