• API接口签名校验(C#版)


    我们在提供API服务的时候,为了防止数据传输过程被篡改,通常的做法是对传输的内容进行摘要签名,把签名串同参数一起请求API,API服务接收到请求后以同样的方式生成签名串,然后进行对比,如果签名串不一致,说明数据在传递过程中被篡改了,这时API服务拒绝本次请求即可,这样我们就实现了签名校验。

    常见的摘要算法方式很多,如MD5、SHA、HMAC等,本文采用的是MD5+Base64的方式生成签名串,具体如下:

    1、MD5加密方法

    点击查看代码
    ///
    /// 字符串MD5加密
    ///
    ///要加密的字符串
    ///编码方式
    ///密文
    public string MD5(string str, string charset)
    {
    byte[] buffer = System.Text.Encoding.GetEncoding(charset).GetBytes(str);
    try
    {
    System.Security.Cryptography.MD5CryptoServiceProvider check;
    check = new System.Security.Cryptography.MD5CryptoServiceProvider();
    byte[] somme = check.ComputeHash(buffer);
    string ret = "";
    foreach (byte a in somme)
    {
    if (a < 16)
    ret += "0" + a.ToString("X");
    else
    ret += a.ToString("X");
    }
    return ret.ToLower();
    }
    catch
    {
    throw;
    }
    }

    2、base64编码方法

    点击查看代码
    ///
    /// base64编码
    ///
    /// 内容
    /// 编码方式
    ///
    public string base64(String str, String charset)
    {
    return Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));
    }

    3、提前给调用方一个Key(类似于私钥),生成签名的时候Key一起参与签名算法。Key相当于加密因子,只有双方知道,这样才能确保安全。

    4、最后生成签名即可:把(参与签名内容(未编码)+Key)进行 MD5 加密,然后Base64编码,最后进行 URL(utf-8)编码即可生成签名串。

    以上就是签名和验签的整体思路,如果对您有帮助劳烦帮忙点个赞,收藏关注一下,可以相互学习共同进步。

  • 相关阅读:
    MyBatis核心配置文件
    分布式进化算法
    python笔记_程序流程控制
    【nvm】【node多版本管理工具】使用说明和踩坑(exit status 1)
    【机器学习教程】五、支持向量机(Support Vector Machines)
    HTML5中使用video标签
    云计算基础-存储基础
    Android 12 apk Installation did not succeed
    态路小课堂丨光纤跳线的使用与维护小指南
    Redis从入门到精通(二十一)Redis最佳实践(二)mset、pipeline、慢查询优化、内存划分
  • 原文地址:https://www.cnblogs.com/huaxiaorui/p/16656996.html