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

  • API接口签名校验(C#版)已关闭评论
  • 16 次浏览
  • A+
所属分类:.NET技术
摘要

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

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

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

1、MD5加密方法

点击查看代码
        ///<summary>         /// 字符串MD5加密         ///</summary>         ///<param name="str">要加密的字符串</param>         ///<param name="charset">编码方式</param>         ///<returns>密文</returns>         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编码方法

点击查看代码
        /// <summary>         /// base64编码         /// </summary>         /// <param name="str">内容</param>         /// <param name="charset">编码方式</param>         /// <returns></returns>         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)编码即可生成签名串。

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