关键词:
参考技术A目前我所知道的项目开发中,基本上都是前后端分离的。这就出现了数据传输的问题,前端传给服务器 或者 服务器传给前端的数据都是容易被别人窃取的。这里就要对传输的数据进行加解密,以保证数据安全。
下面介绍两种前后端数据传输的方式
前后端约定一个key,将请求参数按照字母排序拼接成一个字符串(通常都是ASCll排序),然后拼接上key,最后用MD5或者SHA进行加密,得到一个加密的签名sign,再把sign作为最后一个参数传到服务端。
服务端拿到前端传过来的结果之后,也将参数(排除sign)按照顺序拼接成一个字符串,再拼接上key,再用MD5或者SHA进行加密,也得到了一个新的sign,服务端比较这两个sign,如果相同就说明传回来的数据没有问题,如果不相同,说明数据被串改了。
例如:
传递的参数是
id=5&age=10
现在通过加签 应该传递的参数为
id=5&age=10&sign=MD5(age=10&id=5)
服务端拿到的就是
id=5&age=10&sign=MD5(age=10&id=5)
服务端经过筛选参数,得到 id=5&age=10 ,然后进行排序得到 age=10&id=5 ,再MD5得到sign,两个sign进行比较
目前我知道的根据秘钥的使用方法,可以将密码分为两种
在对称密码中,加密、解密时使用的是同一个密钥,我们常用的AES算法就是对称密码算法。具体AES算法大家自己百度就好了
但是通常使用对称密码时,就会有秘钥配送问题。
例:发送者A将使用对称密码加密过得信息发送给接收者B,只有将秘钥发送给接收者B,B才能进行解密,这里A发送秘钥给B的过程中,就容易被别人窃取秘钥,别人拿着秘钥也能进行解密。
如何解决秘钥配送问题
我知道的几种解决方法
公钥密码
公钥密码中,密钥分为加密密钥、解密密钥2种,它们并不是同一个密钥。
目前使用最广泛的公钥密码算法是RSA
加密密钥,一般是公开的,因此该密钥称为公钥(public key)
解密密钥,由消息接收者自己保管的,不能公开,因此也称为私钥(private key)
公钥和私钥是一 一对应的,是不能单独生成的,一对公钥和密钥统称为密钥对(key pair)
由公钥加密的密文,必须使用与该公钥对应的私钥才能解密
由私钥加密的密文,必须使用与该私钥对应的公钥才能解密
1.由消息的接收者,生成一对公钥、私钥
2.将公钥发给消息的发送者
3.消息的发送者使用公钥加密消息
混合密码系统
不能很好地解决密钥配送问题
加密解密速度比较慢
混合密码系统,是将对称密码和公钥密码的优势相结合的方法,解决了公钥密码速度慢的问题,并通过公钥密码解决了对称密码的密钥配送问题
会话密钥(session key)为本次通信随机生成的临时密钥,作为对称密码的密钥,用于加密信息,提高速度
发送出去的内容包括
前端A >>>>> 服务器端B
发送过程,加密过程
接收过程,解密过程
文章参考了 猿天地的再谈前后端API签名安全? 和李明杰的底层原理iOS签名机制
简洁的前后端分类框架
(function()window.Youmi=;Youmi.VERSION="友吃1.2";varEvents=Youmi.Events=on:function(name,callback,context)this._events||(this._events=);varevents=this._events[name]||(this._events[name]=[]);event 查看详情
前后端分离式开发02(代码片段)
文章目录4前后端练习-商品分类4.1需求4.2数据库设计4.3前端开发4.3.1修改index.js4.4后端开发4.4.1项目结构4.4.2创建POJO层4.4.3创建Dao层4.4.4创建Service层4.4.5创建Controller层4.4.6测试4.5????优化Service层5前后端练习-商品列表5.1需求5.2数据库... 查看详情
前后端分离
一丶为什么要实现前后端分离:前后端分离有什么好处按照项目开发来说:1.实现前后端分离可以使项目更快的研发完成,2.加快了项目的时间传统开发形式: 前后端分离开发:在开发阶段,当有新的需求时,前后端工程师约定好接... 查看详情
vue前后端数据交互问题解决
先在vue项目中配置好路由组件路由然后写相应组件2后端写接口赔路由第三 解决跨域问题处理数据交互这样前端就拿到了数据 查看详情
javaweb社区疫情防控系统前后端分类项目(springboot+vue+mysql)项目源码
idea开发工具,可直接打开运行项目,MySQL数据库8.0实现功能:系统管理、用户管理、角色管理、菜单管理、外出申请管理、楼栋管理、举报管理、体温上报管理、疫苗管理、疫苗接种管理、守护者计划管理项目源码下... 查看详情
为什么要进行前后端分离
传统开发模式与前后端分离模式对比传统开发模式前后端分离方式对比以上两图我们可以看到,前后端分离方式流程简单多了。前后端分离概念简单来说就是后端提供API,前端调用API获取数据来渲染页面,当然这其中还有许多细... 查看详情
springbootlocaldatetime前后端传输问题(代码片段)
后端使用key-value形式接收前端传来的LocalDateTime,则添加@DateTimeFormat注解@DateTimeFormat(pattern="yyyy-MM-ddHH:mm:ss")后端使用json形式接收前端传来的LocalDateTime,则添加下面的@JsonFormat注释同时后端返回给前端的j 查看详情
解决前后端工程师协同工作的问题
前后端工程师工作协同工作主要环节在于数据交互与业务流程控制。 在数据交互方面遇到这种情况,前后端工程师一开始没有沟通好数据交互格式,因为后端做得快,已经写完接口,出了接口... 查看详情
前后端分离实现上传图片的功能(代码片段)
前后端分离实现上传图片的功能思路前端上传图片和分类名称,保存图片文件,将数据追加到formData传给后端,回调清空。后端对图片和分类名分开进行处理。分类名进行普通的增加。图片需要借助工具类转化成统一格式,再构... 查看详情
springbootlocaldatetime前后端传输问题(代码片段)
后端使用key-value形式接收前端传来的LocalDateTime,则添加@DateTimeFormat注解@DateTimeFormat(pattern="yyyy-MM-ddHH:mm:ss")后端使用json形式接收前端传来的LocalDateTime,则添加下面的@JsonFormat注释同时后端返回给前端的jso... 查看详情
前后端分离与不分离,一点点理解
1>为什么要前后端分离?现有开发模式的使用场景前后端职责不清开发效率的问题对前端发挥的局限2>前后端分离会带来什么变化? 1.彻底解放前端 制作页面的时候,不需要后台配置服务器环境,可以自己配置路由,前... 查看详情
前后端分离与不分离
前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。 这种应用模式比较适合纯网... 查看详情
node-blog整套前后端学习记录(代码片段)
Node-Blog后端使用node写的一个一整套的博客系统####主要功能登录注册发表文章编辑/删除文章添加/删除/编辑文章分类账号的管理评论功能...所用技术nodeexpressswig渲染模板body-parser中间件cookiesmongod(mongoose)数据库htmlcssjsajax等主要页... 查看详情
前后端交互中出现的问题
检查后台传输的数据和方法 1》右键查看源代码 2》找到<scriptsrc="/api/AbpServiceProxies/GetAll?type=angular&v=636191473125693932"></script>单击 3》寻找服务接口名,查看对应的增删改查方法<scriptsrc="/api/AbpServi 查看详情
servletapi的使用案例-前后端交互的表白墙(代码片段)
...程序写web程序要重点考虑,数据交互的格式,要提前约定好前后端交互的格式,这件事叫做设计前后端交互接口(包括请求数据是什么格式,响应是什么格式,什么时候发请求,浏览器按什么格式解析)前后端交互的环节:1.点击提交(向浏览... 查看详情
前后端交互的乱码问题
问题描述做项目的时候要求前端向后端传递当前时间的参数,参数里面有中文。在后端接收的时候就发现出现了乱码。于是按照网上的说法,前端编码,后端解码。(因为后端收到数据后会自动解码一次,因此前端需要两次编码... 查看详情
关于前端和后端数据交互问题
...,非商业转载请注明出处。重新修改答案后整理了一份《前后端数据交互方法》在此介绍几种常用的前后端数据交互方法,并给出使用建议。以提高前后端协同开发的效率。目录:1.HTML赋值2.JS赋值3.script填充JS 查看详情
django开发之前后端分离开发模式(代码片段)
1.什么是前后端分离开发的概念:前端页面运行前端服务器上,负责页面的渲染(静态文件的加载)与跳转后端代码运行在后端服务器上,负责数据的处理(提供数据请求的接口)2.前后端分离开发碰到的问题那就是跨域请求的问题:什么是... 查看详情