2013-05-01 78 views
21

我使用RSA加密方式使用openSSL加密数据,该工作正常。我对RSA的理解是,使用相同的公钥加密相同的数据总会给你相同的结果(as stated herehere)。为什么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加密数据的数据库。我想对加密信息的hashsum进行搜索,如果加密过程本身不是唯一的,这是不可能的。

+0

FWIW,rsautil已被折价为[pkeyutil](http://www.openssl.org/docs/apps/pkeyutl.html) – 2013-05-01 20:50:41

回答

38

安全RSA加密是通过适当的填充方案实现的,其中包含一些随机性。有关更多详细信息,请参阅PKCS#1OAEP

RSA加密加密消息填充'0和和一串随机位。在这个过程中,随机字符串通过加密哈希和异或“隐藏”在密文中。在解密时,RSA解密从密文恢复随机字符串并用它恢复消息。这就是为什么你使用openssl rsautl获得不同结果的原因。

5

好的,我明白了。 RSA本身是确定性的。然而,为了获得更好的安全性并防止攻击者猜测加密的信息,加密不是在纯粹的“数据”上进行,而是在“数据”+“某种随机模式”上完成(I should have read wikipedia more carefully

+0

这不仅仅是猜测加密信息。即使信息不可测(比如128位密钥),不使用适当的填充方案也会导致严重的缺陷。即使是仍然流行的PKCS#1 v1.5方案也很薄弱。 – CodesInChaos 2013-05-02 07:29:03

相关问题