以前我使用的是无填充的rsa签名,但是现在我被要求添加PKCS1_OAEP填充,最初我尝试简单地添加此标志“ RSA_PKCS1_OAEP_PADDING”,但在运行时却给出了错误代码
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函数。任何人都可以提供帮助。
提前致谢
根据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”模块源代码,但是请记住RFC 3347是您的朋友:)