1:先上一个简单的安全签名示例:该例子是一个简单的联合登入 功能的api安全校验。
下面是签名方法:
注意:getsign里面的参数 是调用方 传来的数据,
method,api_version是 一些常量,商量好传来的参数,需要校验参数是否正确。
uname ,password 是用户名跟密码。需要在登入页面里面做实际操作,
token:是跟调用方商量好的常量。不放在参数里面。只需要双方在加密的时候在 加密字符串里面加上该参数即可
一般加密使用MD5 不可逆转加密。一般不建议 使用对称加密,对称加密都可以反加密出字符串,这样就有可能被破解接口调用方法。
/// <summary>
/// 获取签名
/// </summary>
/// <param name="method"></param>
/// <param name="api_version"></param>
/// <param name="uname"></param>
/// <param name="password"></param>
/// <returns></returns>
public static string getSign(string method, string api_version, string uname, string password)
{
string resultStr = string.Empty;
Dictionary<string, string> parameterList = SetParameterList(method, api_version, uname, password);
StringBuilder strBuild = new StringBuilder();
foreach (var str in parameterList)
{
strBuild.Append(utf8_string(str.Key));
strBuild.Append(utf8_string(str.Value));
}
//进行第一次MD5加密 Begin
//获取token值
string token = ConfigHelper.GetConfigString("mall.Token");
strBuild.Append(utf8_string(token));
string parameters = strBuild.ToString();
string resultStr0 = Md5Encry(parameters);
//End
//进行第二次MD5加密 Begin
resultStr = Md5Encry(resultStr0);
//End
return resultStr;
}
/// <summary>
/// MD5 32位加密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
internal static string Md5Encry(string str)
{
string cl = str;
string resultStr = "";
MD5 md5 = MD5.Create();//实例化一个md5对像
// 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
for (int i = 0; i < s.Length; i++)
{
// 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
resultStr = resultStr + s[i].ToString("X2");
}
return resultStr;
}