c# api开发过程中我们的接口需要做相应的安全性防御,需要前端按约定生成数据签名sign值(一般是请求body字符串+当前毫秒时间戳+自定义密码),然后后端接收到数据包和sing签名值后根据约定的算法规则验签。这个时候就我们需要用到sign签名算法来制作自己的sign签名验签工具类。本文分别列举了base64签名md5签名生成示例代码供大家参考,示例代码如下。

Base64签名

/// <summary>
/// 获取签名
/// </summary>
/// <param name="_doc"></param>
/// <returns></returns>
private static string EncryptSign(string _doc, string _pwd = "123456")
{
    //_doc是要对其签名的内容,即数据包
    //_pwd是签名密码,可以是secretKey也可以是其他,具体需要和接口提供方自行协商。
    var _text = _doc + _pwd;
    byte[] _input = Encoding.GetEncoding("GBK").GetBytes(_text);
    using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
    {
        byte[] _output = md5.ComputeHash(_input);
        var sing = @Convert.ToBase64String(_output);
        return sing;
    }
}

MD5签名

/// <summary>
/// 获取签名
/// </summary>
/// <param name="_doc"></param>
/// <returns></returns>
private static string EncryptSign(string _doc, string _pwd = "123456")
{
    //_doc是要对其签名的内容,即数据包
    //_pwd是签名密码,可以是secretKey也可以是其他,具体需要和接口提供方自行协商。
    var _text = _doc + _pwd;
    byte[] _input = Encoding.GetEncoding("GBK").GetBytes(_text);
    using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
    {
        byte[] _output = md5.ComputeHash(_input);
        string sign = string.Empty;
        for (int i = 0; i < _output.Length; i++)
        {
            sign += _output[i].ToString("x");
        }

        return sign;
    }
}

如果是.netframework程序,上面的代码可以直接拿去根据实际业务使用。但是.netcore需要安装“System.Text.Encoding.CodePages”包,然后在Encoding.GetEncoding("GBK").GetBytes(_text)之前加上如下代码否则会报错。具体原因参考我的这篇文章 C# 程序中抛出'GB2312' is not a supported异常的解决办法 - 实用工具_软件教程_.net_c#-有码挺好个人博客 (cisharp.com)

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
最后修改:2022 年 09 月 29 日
免责声明:本站为个人博客,博客所发布的一切修改补丁、注册机和注册信息及软件的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途。否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。访问和下载本站内容,说明您已同意上述条款。