0


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;
        }
    }
标签: 安全 https http

本文转载自: https://blog.csdn.net/yh361/article/details/125000665
版权归原作者 劈柴喂马594 所有, 如有侵权,请联系我们删除。

“C#实现SM2签名(对接医保接口注意事项)”的评论:

还没有评论