我需要使用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
但非对称加密是否可行?
答案 0 :(得分:1)
可能不是。
openssl的手册页显示rsautl子命令接受pkcs1 1.5填充,oaep填充,向后兼容的SSL填充或无填充。所有这些(除了没有填充)都会生成随机数据来填充消息,因此没有两个加密会生成相同的密文(这是一件好事)。
如果您可以手动将数据填充到正确的长度,那么您可以使用无填充但是会被警告这会显着削弱您的安全性。
答案 1 :(得分:1)
Cameron Skinner是对的 - 你应该使用随机填充。
也就是说,如果您不愿意,可以使用phpseclib, a pure PHP RSA implementation,如下所示:
$ciphertext = base64_decode('...');
$ciphertext = new Math_BigInteger($ciphertext, 256);
echo $rsa->_exponentiate($ciphertext)->toBytes();
这是一个hackish解决方案,因为phpseclib本身不允许你在没有随机填充的情况下进行RSA加密,但确实可以完成任务。