【数字签名】如何正确地加签/验签

在iOS项目中实现数字签名时遇到验签不通过的问题。原来,验签过程不仅涉及摘要算法,还需要结合算法标识符。例如,使用RSA-SHA256时,需要先对原始信息进行SHA256哈希,然后添加算法前缀3031300d060960864801650304020105000420,才能进行RSA加密,生成正确的签名。理解这一关键步骤对于正确验签至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       项目上需要用到数字签名,原本是简单的服务器签名,客户端验签的流程。因为ios端没有找到比较好的验签库,故根据网传的步骤实现验签,但死活验签不成功,折腾了半天。
       网上的验签流程:

数字签名的技术流程描述如下:
发送方使用摘要算法对原文HASH生成信息摘要;
发送方使用自己的私钥对信息摘要进行签名(加密);
发送方将原文本身和已签名的信息摘要一起发送出去;
接收方使用相同的摘要算法对接收的原文本身生成新的信息摘要;
接收方使用发送方的公钥对已签名的信息摘要进行验签(解密),获得信息发送者的信息摘要;
接收方比较这两个信息摘要是否相同,如果相同则确认信息发送者的身份和信息没有被修改过;否则,则表示被修改过。

       流程没有问题,但是摘要算法是如何处理的并没有说清楚,我一直以为是简单的hash处理。但其实不是,这里其实用了两步,第一步利用摘要算法进行hash,第二步对hash添加对应算法的算法标识符,这样得到加密前的原文。举个RSA-SHA256的栗子:123456的SHA256的hash是8D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92,但这个并不能直接用于rsa加密,需要加上SHA256的前缀3031300d0609608648016503040201050004203031300d0609608648016503040201050004208D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92,这样才能加密后的签名才是正确的签名。
       不同算法的前缀参考rfc3447

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值