RSA的运用和前后端签名的一些看法

  • RSA在验签过程的使用场景分析
    • 不按照上述方式验签会造成的问题
  • 日常前后端交互简化版的RSA应用分析

RSA在验签过程的使用场景分析

 RSA的文章有很多。原理性学术性的对于我这样普通的码农毫无意义,对于我来说,我只想知道为什么我们要用RSA,以及什么情况下我们需要使用它?这是一篇粗浅且迅速入门的文章。

首先,我要介绍RSA验签的流程,稍后再分析为啥要这样做。
场景是存在(A)要传输数据给(B)。为方便起见,我们把数据称为(R)。
此时:A与B各自持有自己的privateKey,以及公之于众的publicKey(由RSA算法生成)。以下我们简称PVK(A)、PVK(B)、PUK(A)、PUK(B)。
A:
①使用某种算法给数据加密,通常会是MD5。我们得到密文M(R)。
②A对M(R)使用PVK(A)加密,得到RSA(M(R))。
③把RSA(M(R)) + R 这样的组合使用B公布的PUK(B)加密,得到最终的密文,简称F(R)。
B:
①B使用PVK(B)解密F(R)得到 RSA(M(R)) + R
到这一步,B已经拿到需要的R了,但是,他不知道R是否是A传来的,需要验签。
②B使用A公布的PUK(A)解密RSA(M(R))得到M(R)
③B使用MD5算法对R加密,得到M(R),比较两个M(R)是否一致,若一致,则验签成功。

不按照上述方式验签会造成的问题

那么假如上述方案去掉几步,会不会就不能成功验签了呢?
那我们不妨做一些假设。假如我就是不法分子C,伪造数据与B通信。

场景①:A只用了PUK(B)加密,B用PVK(B)解密。也就是所有操作阉割得只剩1步。
C:因为PUK(B)是公之于众的,所以我把伪造数据C也使用PUK(B)加密即可。

场景②:A使用PUK(B)加密(M(R)+R)的密文,用于MD5校验,是否能阻止C呢?
C:显而易见。我对(M(C)+C)使用PUK(B)加密,B解密后,依然无法验证C是否是正确的数据。

场景③:也就是按照上述流程,在M(R)上再套一层PVK(A)加密,会怎么样呢?
C:因为C没有PVK(A),只有PVK(C),所以B用PUK(A)无法解密RSA(M(C)),识破了C的阴谋。

日常前后端交互简化版的RSA应用分析

假如只是系统内部验签,其实不用这么麻烦。服务器A与B只需要各自约定加密方式即可。

最简化版的是:
A:
①对R做一些约定好的操作,生成R2。
②使用MD5加密,得到M(R2)。
③发送M(R2)+R

B:
①对R做相同的操作,生成R2。
②使用MD5加密,得到M(R2)。
③验证M(R2)是否相同,若相同,则验签成功。

但是这样的系统存在一些问题。
假如只有两个系统,那么没问题。但是假如有A、B、C、D、E、F等等,系统很多的话,他们之间的加密规则会变混乱,也许EF通信错转发数据给了A,A也顺利验签通过。所以我们需要给AB、AC、AD、AE、AF、BC …都建立一套新R约定的规则,过于麻烦。因此RSA此时就是这样一个规范且不需要额外记忆的规则。

因此我们在上述步骤中,对M(R2)再使用PVK(AB)加密,得到RSA(M(R2))。(验签始终使用PVK加密,这样不法分子C无法对数据伪造。)
这样,B端就可以使用和A约定好的PUK(AB)解密数据,再使用MD5验签了。

我总结一下RSA:
①假如传输数据不能被第三方看见,则用PUK加密。反过来,用什么都行。
②验签只能使用PVK加密,这样才能防止伪造数据。
因此RSA很好理解,就是PVK加密用于防止伪造,再用PUK加密用来隐藏数据。

RSA的运用和前后端签名的一些看法相关推荐

  1. 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密

    学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密 技术标签: RSA  AES  RSA AES  混合加密  整合 前言:    为了提高安全性采用了RSA,但 ...

  2. aes 加密_结合RSA与AES实现前后端加密通信

    结合RSA与AES实现前后端加密通信 一.思路 使用RSA秘钥生成工具生成一对公钥(A)和私钥(B),前端保留A,后端保留B. 前端发送数据时,先生成一串随机16位字符串作为AES的秘钥(C),然后使 ...

  3. Vue与Spring boot基于RSA非对称加密进行前后端交互

    当处理大型的系统项目,或者保密性要求高的项目.是要解除一些加密算法的,非对称加密肯定比对称加密更加安全,但是也更消耗性能.这里就展示一下前端使用Vue,后端使用Spring boot的情况下,进行前后 ...

  4. angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现

    今天实现了下AES和RSA加密解密,主要的功能是对前后端交互数据进行加密解密,为什么要用到两个算法呢,首先RSA默认的话加密长度是有限的100多个byte吧大约,并且需要公钥私钥,而AES加密没有限制 ...

  5. 【笔记】个人网站建站不要用前后端分离!!!!!- 对前后端分离的个人看法

    血淋淋的教训,让人无比心痛, 个人网站建站不要用前后端分离!!!!! 在上家公司开发,一心一意码代码,习惯了只写后端,不关注前端,真是做到了只关注后台逻辑和接口返回,不用关心其它的事情, 写的那是爽到 ...

  6. 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密(方式一)

    参考地址:https://blog.csdn.net/baidu_38990811/article/details/83540404

  7. 实现前后端分离的心得

    对目前的web来说,前后端分离已经变得越来越流行了,越来越多的企业/网站都开始往这个方向靠拢.那么,为什么要选择前后端分离呢?前后端分离对实际开发有什么好处呢? 为什么选择前后端分离 在以前传统的网站 ...

  8. 前后端分离框架的实用及优点

    这几天有很多新手同学问我这个问题.今天想写个博客给大家说一下自己对前后端分离开发的看法. 为什么要使用前后端分离开发的架构模式? 前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端 ...

  9. 教你玩转Vue和Django的前后端分离

    题图:枯树新芽,来自网络,侵删. 阅读本文大概需要 10 分钟. 今天中秋节,先祝大家节日愉快,不在父母身边的都打个电话关心一下吧,我们最容易忽略的人恰恰是最爱我们的父母. 另外,节假日真的不适合出去 ...

最新文章

  1. xlsxwriter写行合并_使用xlsxwriter将pandas数据框写入excel并包含“write-rich”字符串格式...
  2. simpack导入实际线路激励
  3. android 动画多次使用,IOS使用animation引用同一个动画多次没反应,安卓可以
  4. 也谈闭包--小白的JS进阶之路
  5. 让内核突破512字节的限制
  6. 3月1日Azure夜校第三场继续开始
  7. vivo NEX 3 5G真机曝光:瀑布屏+升降镜头
  8. 基于JWT(Json Web Token)的授权方式
  9. BZOJ 2821: 作诗(Poetize) [分块]
  10. 屏幕空间的动态全局光照(漫反射)
  11. 程序员眼中的“鼠标宏”
  12. 虚拟机下的SYN Flood测试
  13. matlab如何生成极坐标,如何在matlab中极坐标画图
  14. jsp是java的一种吗_jsp是什么
  15. html touch时没有阴影,4399touch怎么玩 Touch游戏常见问题汇总
  16. 解决nasm汇编gdb无法单步调试
  17. 计算机毕业设计之java+javaweb的电动车实名制挂牌管理系统
  18. yuv 格式之 Semi Planar和Planar
  19. win10启动0xc0000001错误
  20. expected `;' before ‘iter’

热门文章

  1. python3-opencv库(4)--图片像素运算,利用加权叠加调节图像对比度和亮度
  2. Springboot事件监听机制:工作原理
  3. C51单片机实现六位数码管时钟
  4. sql显示服务器连接不上,sql服务器连接不上
  5. 【玩点不一样】你用别人CDN资源多了,有没有想过自己也搭建一个CDN玩玩?
  6. 写给33岁的自己:为之奋斗一生的事业
  7. Linux系统中使用Nginx实现反向代理
  8. 【Hive】hive基本操作 ddl dml
  9. (超长文)Hive Sql基本操作
  10. android原生和H5交互(转)