这段时间实在太忙了,总有忙不完是事情,博客一直没有刷新。近日很多朋友问我关于各种接口对数据的安全性控制,今天我们就一起的分享一下”数据签名验证“。
我们先来了解一下“数据签名验证”的含义:
1.数据
数据是指客户端传输到服务端的数据,说白点就是参数,例如:http://easy98.cn?mobileNO=12345678&SmsContent=test;mobileNO=12345678&SmsContent=test则是传输的数据。
2.签名
签名是指将数据和密钥放入一个数据包,通过MD5对此数据包签名,得到一个MD5的验证码,众所周知MD5是一种不可逆的签名算法。在验证码网络传输中也大可不用考虑它会被解包从而拿到密钥。
3.验证
验证是指在服务端验证数据包是否被篡改或非法数据,验证方式:服务端先见数据和密钥放入数据包,再用MD5签名得出验证码,然后在于客户端传过来的验证码进行比较,如果一致则代表数据无篡改,反之不是客户端签名错了就是在传输时数据被篡改。
废话少说,大家还是看代码叫清楚。
1.服务端
public bool SendSms(string authString, string mobiles, string smsContent, ref string error)
{
//签名的密钥,服务端和客户端分别保存一份用于签名
string md5Key = "980017891ff67cf8a20f23aa810e7b5a";
//签名验证
string str = string.Concat(mobiles, smsContent, md5Key);
//计算出MD5值
string md5Value = Helper.ToMD5String(str);
//客户端签名结果与服务端签名结果匹配
if (!md5Value.Equals(authString, StringComparison.CurrentCultureIgnoreCase))
{
//不是合法客户端请求时,将拒绝对此请求提供服务
error = "非法请求,验证身份失败";
return false;
}
//如果是合法请求,则继续为此请求提供服务
//TODO:以下处理业务....
return true;
}
2.客户端
public bool Test()
{
//签名的密钥,服务端和客户端分别保存一份用于签名
string md5Key = "980017891ff67cf8a20f23aa810e7b5a";
string mobiles = "123456789";
string smsContent = "短信内容";
//签名验证
string str = string.Concat(mobiles, smsContent, md5Key);
//计算出MD5值
string md5Value = Helper.ToMD5String(str);
string error = string.Empty;
//调用
if (!SendSms(md5Value, mobiles, smsContent, ref error))
{
//调用失败
}
return true;
}
大家应该对数据签名验证了解了,当然在很多情况下还有注意很对细节,和各种场合下的使用。例如有多个客户端调用此接口,但各个客户端的密钥不同,或者我需要拒绝某个客户端的请求;需要验证用户密码时如何达到不传输用户密码即可验证用户的密码是否输入正确...等等。
好了,今天就写到这,希望大家能提出宝贵意见,互相学习探讨。如有疑问请加Q445444818
快来拍砖啦..........