无盐Openssl非对称加密(在php中)
我需要使用 SSH-2 RSA 1024 位(使用公钥)加密字符串数据,然后使用 RMD-160 算法。我这样做:
生成私钥:
openssl genrsa -des3 -out privatekey.key 1024
公钥:
openssl rsa -in privatekey.key -pubout -out public.pem
加密数据:
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out encrypted_data.txt
但是,请求是:需要使用相同的输入获得相同的输出!例如,如果输入字符串是“一些数据”并且加密的字符串是“a23c40327a6c5a67a5bb332”,那么每次输入是“一些数据”时我都需要获得“a23c40327a6c5a67a5bb332”输出
我可以使用非对称加密来做到这一点吗?
我知道可以使用对称加密(例如带有 -nosalt 选项的 DES)来完成,
openssl des3 -nosalt -in file.txt -out file.des3
但是可以使用非对称加密吗?
I need to encrypt a string data with SSH-2 RSA 1024 bit ( with the public key ) then with RMD-160 algorithm. I do it like this:
generate private key:
openssl genrsa -des3 -out privatekey.key 1024
public key:
openssl rsa -in privatekey.key -pubout -out public.pem
encrypt the data:
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out encrypted_data.txt
But , the request is: need to get the same output with the same input! For example if the input string is "some data" and the encrypted string is "a23c40327a6c5a67a5bb332" then i need to get the "a23c40327a6c5a67a5bb332" output every time when the input is "some data"
Can i do it with asymmetric encryption?
I know it can be done with symmetric encryption like DES with the -nosalt option
openssl des3 -nosalt -in file.txt -out file.des3
but is it possible with asymmetric encryption?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可能不会。
openssl 的手册页显示 rsautl 子命令接受 pkcs1 1.5 填充、oaep 填充、向后兼容的 SSL 填充或无填充。所有这些(除了没有填充)都会生成随机数据来填充消息,因此没有两种加密会生成相同的密文(这是一件好事)。
如果您可以手动将数据填充到正确的长度,那么您可能可以不使用填充,但请注意,这会显着削弱您的安全性。
Probably not.
The man page for openssl shows that the rsautl sub-command accepts pkcs1 1.5 padding, oaep padding, backwards-compatible SSL padding or no padding. All of these (except no padding) generate random data to pad the message, so no two encryptions will generate that same ciphertext (this is a good thing).
If you can manually pad your data to the right length then you might be able to use no padding but be warned that this will significantly weaken your security.
卡梅伦·斯金纳 (Cameron Skinner) 是对的 - 您应该使用随机填充。
也就是说,如果你不想,你可以使用 phpseclib,一个纯 PHP RSA 实现,所以,如下所示:
这是一个 hackish 解决方案,因为 phpseclib 本身不允许您在没有随机填充的情况下进行 RSA 加密,但它确实可以完成工作。
Cameron Skinner is right - you should be making use of randomized padding.
That said, if you don't want to, you can use phpseclib, a pure PHP RSA implementation, to do so, as follows:
It's a hackish solution since phpseclib doesn't natively let you do RSA encryption without randomized padding but it does get the job done.