OpenSSL解密错误 - 填充与原始

Fir*_*boy 9 encryption cryptography

我收到一个加密文件,这是合作伙伴的关键.密钥本身已使用我们的数字证书公钥加密.

当我尝试使用以下和我们的私钥解密密钥时,我得到一个填充错误,如下所示:

C:\openssl rsautl -decrypt -in xxxx_Key -inkey xxxxprivatekey.pem -hexdump -out aeskey.txt
Loading 'screen' into random state - done
RSA operation error
5612:error:0407109F:rsa routines:RSA_padding_check_PKCS1_type_2:pkcs decoding er
ror:.\crypto\rsa\rsa_pk1.c:273:
5612:error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed:.\
crypto\rsa\rsa_eay.c:602:
Run Code Online (Sandbox Code Playgroud)

如果我将-Raw开关添加到解密,它似乎工作,但生成的hexdump比我期望的大.任何人都可以提供关于这里可能发生的事情的建议吗?谢谢!

小智 9

我的猜测是你用错误的私钥解密或你的密文被破坏了.

在RSA中,填充用于将被加密的消息的长度扩展为与模数相同的大小(因此1024位RSA将消息填充到1024位).PKCS1类型2是(我相信)PKCS#1 v1.5的另一个名称,它将填充添加0x00 || 0x02 || (random bytes) || 0x00到消息的开头.解密第一次检查时,消息的开头是0x00 0x02.然后0x00剥离所有直到并包括第二个字节的字节,产生原始消息.如果开始没有0x00 0x02或没有第二个0x00字节,则存在填充错误.

如果忽略填充检查,则很可能会得到与RSA模数大小相同的消息,因为没有删除填充.考虑到大多数RSA模数至少为1024位,这将比AES密钥大得多.