博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈提高WebService的访问安全性之数据签名验证
阅读量:4952 次
发布时间:2019-06-12

本文共 1624 字,大约阅读时间需要 5 分钟。

  这段时间实在太忙了,总有忙不完是事情,博客一直没有刷新。近日很多朋友问我关于各种接口对数据的安全性控制,今天我们就一起的分享一下”数据签名验证“。

  我们先来了解一下“数据签名验证”的含义:
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

快来拍砖啦..........

转载于:https://www.cnblogs.com/fineblog/archive/2013/03/24/2979298.html

你可能感兴趣的文章
access remote libvirtd
查看>>
gdb调试中出现No symbol table is loaded. Use the "file" command.问题
查看>>
(4) Orchard 开发之 Page 的信息存在哪?
查看>>
ASP.NET中 GridView(网格视图)的使用前台绑定
查看>>
图像加载
查看>>
关于zxing生成二维码,在微信长按识别不了问题
查看>>
Haskell学习-高阶函数
查看>>
手动通知扫描SD卡主动生成缩略图
查看>>
js中tagName和nodeName
查看>>
PC-XP系统忘记密码怎么办
查看>>
Android实例-打电话、发短信和邮件,取得手机IMEI号(XE8+小米2)
查看>>
深入了解Oracle ASM(二):ASM File number 1 文件目录
查看>>
SQL数据库学习系列之一
查看>>
Boosting(提升方法)之AdaBoost
查看>>
CUDA学习1 在Visual Studio和CodeBlocks上配置
查看>>
JavaScript(6)——事件1.0
查看>>
2013 ACM-ICPC China Nanjing Invitational Programming Contest 总结
查看>>
【Hibernate学习笔记-5】@Formula注解的使用
查看>>
链接元素<a>
查看>>
Binding object to winForm controller through VS2010 Designer(通过VS2010设计器将对象绑定到winForm控件上)...
查看>>