我正在收到一个加密文件及其来自合作伙伴的密钥。密钥本身已使用我们的数字证书公钥加密。
当我尝试使用以下和我们的私钥解密密钥时,我收到填充错误,如下所示:
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:
如果我将-Raw
开关添加到解密,它似乎可以正常工作,但生成的hexdump比我预期的要大。任何人都可以提供关于这里可能发生的事情的建议吗?谢谢!
答案 0 :(得分:7)
我的猜测是您使用错误的私钥进行解密,或者您的密文已损坏。
在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密钥大得多。