Encryption Openssl无盐非对称加密(php)

Encryption Openssl无盐非对称加密(php),encryption,openssl,salt,Encryption,Openssl,Salt,我需要使用SSH-2rsa1024位(使用公钥)加密字符串数据,然后使用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_

我需要使用SSH-2rsa1024位(使用公钥)加密字符串数据,然后使用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”输出

我可以用非对称加密吗

我知道它可以通过对称加密完成,比如DES和-nosalt选项

openssl des3 -nosalt -in file.txt -out file.des3
但非对称加密有可能吗?

可能没有

openssl的手册页显示rsautl子命令接受pkcs1 1.5填充、oaep填充、向后兼容的SSL填充或无填充。所有这些(除了没有填充)都会生成随机数据来填充消息,因此没有两次加密会生成相同的密文(这是一件好事)


如果您可以手动将数据填充到正确的长度,那么您可能可以不使用填充,但会被警告这将显著削弱您的安全性。

Cameron Skinner是正确的-您应该使用随机填充

也就是说,如果你不想,你可以使用,来这样做,如下所示:

$ciphertext = base64_decode('...');
$ciphertext = new Math_BigInteger($ciphertext, 256);
echo $rsa->_exponentiate($ciphertext)->toBytes();

这是一个黑客解决方案,因为phpseclib本机不允许您在不使用随机填充的情况下进行RSA加密,但它确实完成了这项工作。

所以您不想加密,而是对数据进行RSA签名?