C#实现SM2签名(对接医保接口注意事项)

最近在做对接医保接口的项目,入参要求进行SM2签名(注意:是签名而非加密,开始理解成加密研究了一堆加密源码,使用提供的私钥也会报错,后面才发现SM2有专门的签名方法,而接口调用签名也就是SM2签名而非加密)

下面是说明适用于2022年云南省医保平台相关项目:
SM2签名入参有私钥,加密内容,用户id,一定要注意平台下发的加密工具或者demo,加密规则一定要和平台一致,不然签名验签会一直验签失败,以下是我发现的问题及处理(平台下发demo签名时入参给了3个,实际使用只用了两个,userid签名加密时没有使用,替换的是一个随机数;之前一直验签失败就是我给的3个入参都参与了加密签名,所以就会失败):

public static byte[] SignSm3WithSm2Asn1Rs(byte[] msg, byte[] userId, AsymmetricKeyParameter privateKey)
{
try
{
SM2Param sM2Param = new SM2Param();

            ISigner signer = SignerUtilities.GetSigner("SM3withSM2");

            ICipherParameters cp = new ParametersWithRandom(privateKey);
            //userid不参与签名加密
            //signer.Init(true, new ParametersWithID(privateKey, userId));
            signer.Init(true, cp);

            signer.BlockUpdate(msg, 0, msg.Length);
            byte[] sig = signer.GenerateSignature();
            return sig;
        }
        catch (Exception e)
        {
            log.Error("SignSm3WithSm2Asn1Rs error: " + e.Message, e);
            return null;
        }
    }
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值