使用RSA_PKCS1_OAEP_PADDING进行RSA签名

 jingjing20111201 发布于 2023-01-18 16:09

以前我使用的是无填充的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函数。任何人都可以提供帮助。

提前致谢

1 个回答
  • 根据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是您的朋友:)

    2023-01-18 16:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有