Token以及签名signature的设计与实现肖冬

LZ第一次给app写开放接口,把自己处理Token的实现记录下来,目的是如果以后遇到好的实现,能在此基础上改进。这一版写法非常粗糙,写出来就是让大家批评的,多多指教,感谢大家。

当初设计这块想达到的效果或者说考虑到的问题有这么几点:

首先是token的模型:

再来就是TokenModel的管理类:

/***对Token进行操作的接口*@authorxiaodong*/publicinterfaceTokenManager{/***创建一个token关联上指定用户*@paramuserId指定用户的id*@return生成的token*/TokenModelcreateToken(StringuserId);/***检查token是否有效*@parammodeltoken*@return是否有效*/booleancheckToken(TokenModelmodel);/***清除token*/voiddeleteToken(StringaccessToken);}该接口实现:

这样做好处是:

缺点:

我把剩余的ResultModel类补上。

=================2019.04.17追加=================

重新审视这个问题。

第一种是传统的办法,使用自签名证书,借用jdk和web容器的ssl层实现,这种方法比较常用,也比较省事。

第二种是手动编程的方法,类似于自己写了一层ssl的实现。原理也很简单,对方把数据加密后传给LZ的服务端,LZ这边解密后该怎么处理就怎么处理,完事以后把响应的数据加密传给客户端,客户端解密之后该怎么处理就怎么处理。

经过一番实验和思考,LZ还是决定采用第二种方法。主要原因是,这种方式更加灵活,加密方案是LZ可以随意更改的(比如把其中的某个算法用别的算法替换)。还有一点原因是,自己写的东西更加容易掌控,如果加密层出现问题,LZ作为PM可以更快的定位问题。最后一点原因是,基于算法而不是基于Java类库,更容易制作各种语言的客户端。

方案基本确定,接下来就是代码设计。代码设计分为客户端和服务端,作为客户端,LZ可以提供公用的加密解密组件给合作伙伴调用(比如java客户端,php客户端,.NET客户端等等)。作为服务端,LZ只需要过滤器和定制视图就可以轻易完成加密和解密的工作。

最终写出来的客户端API如下:

HttpsHelper.sendJsonAndGetJson(JSONObjectjson);

HttpsHelper.sendJsonAndGetJson(JSONObjectjson,inttimeout);

服务端需要一个过滤器和一个定制的json视图。

SecurityFilter

JsonView

由于LZ发布的是restful风格的服务,因此使用的mvc框架是springmvc。这两个类的具体代码这里就不贴了,总之过滤器完成请求参数的解密,视图完成响应结果的加密。

以上基本上已经完成了整个加密解密功能的设计,接下来的工作就是将工作落实到实处,到底加密算法如何选择?

之前LZ对加密解密算法可谓是大大的小白,就知道一个md5算法,一般是用于密码加密的。这下可难倒LZ了,不过没关系,有百度和google,还有什么不能在几天之内学到的东西吗。

经过一番百度和google,LZ发现算法主要分为以下三种:

1,不可逆加密算法,比如md5就是这样一种,这种算法一般用于校验,比如校验用户的密码对不对。

2,对称加密算法,这种算法是可逆的,两边拥有同一个密钥,使用这个密钥可以对数据加密和解密,一般用于数据加密传输。特点是速度快,但安全性相对于非对称加密较低。

3,非对称加密算法,这种算法依然是可逆的,两边拥有不同的密钥,一个叫公钥,一个叫私钥,两边也都可以对数据加密和解密,一般用于数字签名。特点是速度较慢,但安全性相对于对称加密更高。

之前LZ听说过ssl的实现是几种算法混合使用的,这给了LZ很大的启示。既然每种算法都有它的优势,我们为何不混合使用呢。

于是,LZ想来想去(主要是在公车上以及厕所思考),决定使用md5(不可逆加密)+des(对称加密)+rsa(非对称加密)的加密方式,编码格式可以使用Base64。来看看LZ的需求,主要有两点。

2,数据在传输过程中是加密的,并且安全性要等同于非对称加密算法的安全性,但性能要等同于对称加密的速度。

我们来看看以上的算法实现能否满足需要,过程是这样的。

2,客户端需要先对123456进行md5加密,然后放入到传输数据中。也就是传输的数据会变成{"name":"xiaolongzuo","verifyCode":"md5(123456)"}

3,客户端生成des的随机密钥(注意,对称密钥每次都是随机生成的),假设是abcdef,客户端使用该密钥对传输数据进行des加密,并且对随机密钥进行rsa加密,最终拼成一个json。也就是最终传输的数据会变成{"privateKey":"rsa(abcdef)","data":"des({"name":"xiaolongzuo","verifyCode":"md5(123456)"})"}

安全性分析:假设以上的数据被黑客拦截,那么黑客最主要做的就是破解rsa算法的私钥(私钥只有LZ有,客户端组件中会附带公钥),这个问题听说是比较难的,具体为什么,这就不是LZ需要考虑的了,LZ还没这个能力。基于这个前提,LZ可以认为传输的数据还是比较安全的。

性能分析:由于我们的rsa只对长度比较短的des私钥进行加密,因此非对称加密速度慢的特点并不会影响我们太多。几乎上所有的传输数据,我们都是使用的des进行加密,因此在速度上,几乎等同于对称加密的速度。

THE END
1.艺术签名设计免费版在线生成艺术签名设计不仅仅是一种装饰,更是个人魅力的体现。通过艺术签名设计,您可以更好地展示自己的个性,同时也能增强您在社交场合的吸引力。二、如何使用在线生成工具设计艺术签名1. 找到合适的工具:有许多在线生成工具可以帮助您设计艺术签名。您可以在互联网上搜索“艺术签名设计免费版在线生成”,找到适合您的工具。2. https://aiqicha.baidu.com/qifuknowledge/detail?id=17901767656
2.如何在线设计签名?手把手教你自己设计签名方法一:一键logo设计 第一步 点击打开手机上的软件,进入到软件的首页,进入软件的首页,找到【签名设计】选项,在弹出的页面中输入自己的名字。 第二步 输入好相应的文本之后,我们可以选择字体、字体颜色、描边颜色以及背景颜色。选择好之后,点击【免费设计】即可生成相应的个性签名,如果不满意的话,我们还可以点击进行重https://cloud.tencent.com/developer/news/978004
3.一键生成艺术签名:全面傻瓜式操作指南接下来的章节将详细介绍操作简易性、用户界面设计、设计步骤、高级设置以及应用场景,全面展示免费艺术签名软件的魅力所在。 2. 操作简易性详解 在本章节中,我们将深入探讨免费艺术签名软件的操作简易性,这是软件吸引用户的关键因素之一。我们将从设计理念和用户反馈两个方面进行详细分析。 https://blog.csdn.net/weixin_33597080/article/details/142882859
4.超全Java知识总结:网络OSJVM并发数据库。。网络层任务:① 为分组交换网上的主机提供通信服务,在发送数据时把运输层数据报封装成分组传送。② 选择合适路由,使源主机的分组通过路由器找到目的主机。 网络层协议包括: 网际协议 IP 一般指 IPv4,与 IP 配套使用的还有 ARP、ICMP 和 IGMP。 IP 数据报分为首部和数据两部分。首部前 20 字节是固定的,包含源地https://acm.nowcoder.com/discuss/505106
5.艺术签名设计(艺术签名软件)V3.0绿色版下载艺术签名设计(艺术签名软件)绿色版是收费的签名设计软件,签名设计收费版,想要一手漂亮的签名么?想要你的签名和明星一样漂亮么?只要输入姓名,点一下鼠标,多描写几遍,就可以设计出和专业设计相媲美的签名了。本软件搜集了网上漂亮的签名字库,一定能给你一个惊喜。https://www.xiazaiba.com/html/27347.html
6.个人网络信息安全论文(精选10篇)而且与节点也存在通信冲突的情况,所以在对安全算法进行设计过程中一定要对容错问题予以选择,对节点通信进行合理协调;④无线网络系统存在漏洞。随着近些年我国经济的迅猛发展,使得无线互联网逐渐提升了自身更新速度,无线互联网应用与发展在目前呈现普及状态,而且在实际应用期间通常受到技术缺陷的制约与影响,由此就直接损害到https://biyelunwen.yjbys.com/fanwen/xinxianquan/727543.html
7.爱国主义教育方案8篇(全文)在开展主题调查的基础上,组织召开“颂祖国、懂感恩、立壮志、促新风”主题班会,让学生在交流调查情况的基础上更加真切的感受祖国的繁荣和富强,引导学生思考在为祖国繁荣富强而自豪的今天,我们应当如何为祖国的发展贡献自己的力量。 6、网上签名寄语 运用网络阵地,组织学生积极参与“向国旗敬礼、做有道德的人”网上签名https://www.99xueshu.com/w/filegsdtf7v9.html
8.网上设计个性艺术签名的网站我们提供透明的连笔签、一笔签、商务签、公务签等多款艺术签名设计免费版。 这是网上第一家免费在线设计艺术签名的网站,请大家帮忙宣传! 签名的魅力,在于方寸之间把个性大大的发挥,不仅营造风格迥异的中国文字艺术,张扬不为人知的人格魅力,也让心灵得到温存和安慰。 真笔网推出的在线艺术签名设计拥有连笔签名设计、一http://www.v.zhenbi.com/e/m5.htm
9.美发行业如何玩转抖音?零售当一个粉丝在看你的视频,想知道你的信息时,第一件事就是点进你的主页,首先映入眼帘的就是你的签名栏。所以签名栏的设计是用来介绍你发布的内容核心,并告诉客户你可以给他们提供什么价值。 为了让别人看起来毫不费力,我想给你一点关于签名的建议:更多的断句。客户最想看到的是你的签名栏里有属于他需要的内容,可https://www.ebrun.com/20220829/497247.shtml
10.开店计划书范文(精选10篇)大家买东西时,开始都是搜索相关的产品,在设置产品名称的时候,设计好大家比较常用的关键词,可以让买家多次搜索到你的店和产品,或是最低价和特惠等词,对商品的描述尽可能详细。 六、签名的推广 QQ签名可以及时发促销信息,在论坛的签名可以带动态的.相关网店图片进行宣传。 https://www.fwsir.com/fanwen/html/fanwen_20160518091529_337275.html
11.名字签名免费设计一个恰到好处的佳名、雅号,在本质上应当是一种与时俱进,受时尚文化规定影响的高雅文化,应当是一幅赏心悦目的山水画,是一首语言凝 练、内涵丰富的好诗。以下是思取名字男孩名字,欢迎阅读。思远 思 思源 思明 思宇 思伟思聪 经典个性签名设计 攀登者智慧和汗水,构思着一首信念和意志的长诗,经典个性签名设计https://www.unjs.com/h/b/180954.html
12.易烊千玺艺术字体签名如何设计?最近易烊千玺的签名火了,也是有很多人开始模仿着易烊千玺的签名体,开始设计自己的签名。有一些人还开始在网上寻求易烊千玺签名字体的教程。那像易烊千玺艺术字体签名是如何设计的呢? “易烊千玺”签名字体火了,这些艺术字体签名还远吗? 易烊千玺艺术字体签名如何设计? https://www.17font.com/news/3a9db7cfaedf482ca097570c61f84367.html
13.关于建筑施工图纸签名的责任划分相关的法律依据是什么设计人员关于关于建筑施工图纸签名 的责任划分相关的法律依据是什么 设计人员签名应符合什么规范的律师回答 正义辩护律师团 帮助54200人· 响应1-3分钟内 咨询我 这是困扰设计单位结构设计人员责任,如果设计出现差错造成严重事故,由于图纸是三者签的,虽然三者有分工,但主要是程序上的,技术上要严格分清是十分困难的。很早约https://mip.66law.cn/question/28465253.aspx
14.11、网上给学生月度总结的评语不能更改,有的把评语点开后当时没写评语,后来再想写,就没有写评语的对话框了。 答:有点击评语的地方,就在菜单切换下。 五、毕业设计(论文) 1、毕业设计(论文)模块的使用流程? 答:(教务员)录入指导老师信息--->(指导老师)录入课题--->(指导老师)选择学生--->(学生)选题--https://sjjx.baiyunu.edu.cn/ToSys/newDetails/1022
15.7款免费又好用的艺术签名设计软件推荐名字签名是我们在日常工作与生活中经常需要使用到的,因此很多网友都会通过下载一些艺术签名设计软件来练习自己的名字签名。不过,目前网上的一些艺术签名设计软件有的是收费的,有的又生成不了图片供我们进行练习。所以,今天小编就为大家推荐几款好用又免费的艺术签名设计软件,希望大家喜欢! https://tech.wmzhe.com/article/3031.html
16.国庆节策划活动方案范文大全10篇及我司所存在的赠品做统一配送并于活动前2天传到各分店,各分店根据采购部所制定的赠品配送政策事先书写好海报,活动前1天晚上张贴在对应商品上,同时采购部根据赠品在活动前根据赠品情况进行对应调拨。 5.老总签名、字字重金 活动期间联系众厂家资源分别在_月_日、_日,_月_日、_日、_日、_日(星期_、_)开展老总https://www.xuexila.com/fwn/shishifangan/c613154.html
17.幼儿园大班爱国主义教育活动方案范文(精选11篇)(1)以班级为单位组织网上签名寄语。中国文明网、央视网等网站在首页显着位置推出“向国旗敬礼、做一个有道德的人”网络签名寄语栏目,各班主任要在10月12日以前认真组织本班学生共同完成网上签名寄语,热情抒发对伟大祖国繁荣昌盛、和谐富强的衷心祝愿,立志做一个有道德的人。 https://m.ruiwen.com/gongwen/fangan/840418.html
18.第四届中国信息网络与高新技术法律实务研讨会暨全国律协信息网络与高新银行业在使用电子签名的过程中,常常面临电子签名的身份认证问题及电子签名是否具有法律认可的“原件形式”的问题。黄静提出银行业使用电子签名的法律保障:第一,通过CA数字证书认证解决电子签名身份认证;第二,运用可信时间戳服务保证数据电文自最终形成时起,内容保持完整、未被更改,是解决各种电子数据符合法律要求的原件形式https://www.hnlawyer.org/news/1975.html