• 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)编码即可生成签名串。

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

  • 相关阅读:
    python图像处理 ——图像锐化
    MFC/QT 一些快要遗忘的细节:
    B-树----(多插平衡树)
    USB转单串口、多串口芯片选型UART.TTL.RS-232等
    一、Verilog基础语法学习
    数据库设计与建模
    Linux系统目录详解
    植物大战僵尸各种僵尸攻略(四)
    JWT解密和python反序列化之[CISCN2019 华北赛区 Day1 Web2]ikun
    三季度毛利“转正”的零跑,四季度已经打响“第一枪”?
  • 原文地址:https://www.cnblogs.com/huaxiaorui/p/16656996.html