以前我使用rsa签名没有填充,但现在我被要求添加PKCS1_OAEP填充,最初我尝试简单地添加此标志&#34; RSA_PKCS1_OAEP_PADDING&#34;,但它在运行时提供错误代码< / p>
error:04066076:rsa routines:RSA_EAY_PRIVATE_ENCRYPT:unknown padding type
此外,我用PKCS1_OAEP填充搜索了rsa签名,但没有得到任何东西,除了说实现RSA_PKCS1_OAEP填充你必须使用这个
int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
unsigned char *f, int fl, unsigned char *p, int pl);
然后使用RSA_NO_padding进行private_encrypt,但仍然有困惑,因为他们没有明确解释如何明确地使用这个padding_add函数。可以任何人提供帮助。真的很感激。
提前致谢
答案 0 :(得分:4)
根据RFC 3447 OAEP填充方案只能用于加密操作,因此不能与签名一起使用。如果标准的RSASSA-PKCS1-v1_5方案不够好,我相信你应该使用推荐用于新应用的RSASSA-PSS,其特性与OAEP方案类似。有关详细信息,请参阅RFC 3447。
您可以使用命令行OpenSSL工具轻松检查我的答案是否正确:
生成私钥:
openssl genrsa -out private.key 2048
生成一些输入数据:
echo "Hello world" > input.data
尝试使用OAEP方案生成签名:
openssl rsautl -sign -oaep -inkey private.key -in input.data -out output.data
RSA operation error
139655304349344:error:04066076:rsa routines:RSA_EAY_PRIVATE_ENCRYPT:unknown padding type:rsa_eay.c:389:
尝试使用OAEP方案加密数据:
openssl rsautl -encrypt -oaep -inkey private.key -in input.data -out output.data
如果您需要更多信息,还可以查看"rsautl" module source code,但请记住RFC 3347是您的朋友:)