我们在提供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)编码即可生成签名串。
以上就是签名和验签的整体思路,如果对您有帮助劳烦帮忙点个赞,收藏关注一下,可以相互学习共同进步。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |