1

我需要使用 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

但是非对称加密有可能吗?

4

2 回答 2

1

可能不是。

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

如果您可以手动将数据填充到正确的长度,那么您可能可以不使用填充,但请注意这将大大削弱您的安全性。

于 2011-10-01T08:07:07.747 回答
1

Cameron Skinner 是对的——你应该使用随机填充。

也就是说,如果你不想这样做,你可以使用phpseclib,一个纯 PHP RSA 实现,这样做,如下所示:

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

这是一个骇人听闻的解决方案,因为 phpseclib 本身不允许您在没有随机填充的情况下进行 RSA 加密,但它确实完成了工作。

于 2011-10-06T12:17:05.667 回答