API-接口安全签名(一)

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;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值