既然加密需要密钥,那么密钥是什么呢?
密钥是作用于加密时的一串密码,通过密钥进行信息加密,传输,到达接收者和监听者,由于接收者也有密钥,所以接收者可以根据密钥进行解密。从而防止通讯信息泄露。
三、什么是对称加密
前言讲的故事就是一个对称式加密,小明和小红都知道第一次约会的日期。所以传统的对称式加密需要通讯双方都保存同一份密钥,通过这份密钥进 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 行加密和解密。所以非对称加密也称为单密钥加密。
对称加密的优势在于加解密速度快,但是安全性较低,密钥一旦泄露,所有的加密信息都会被破解。同时密钥的传输和保密也成为难题。为了解决密钥传输的问题,出现通过密钥交换建立共享密钥的技术。具体如何建立共享密钥呢?我们往下看。
3.1 建立共享密匙在小明、小红和小偷的三人世界中,由于小明是学过加密原理的,知道迪菲–赫尔曼密钥交换(Diffie-Hellman Key Exchange),所以他知道如何建立共享密钥。
3.1.1 颜料混合把戏:
接下来我们看看如何通过颜料混合把戏建立共享密钥吧。
假设在房间中有小明、小红和小偷三个人,每个人各自拥有相同颜色的颜料。在房间的正中间也有这些颜料。接下来,小明要和小红建立共享密钥了。此时,小明对大家说:“我要用蓝色。”然后小明从自己的颜料里选择了黄色,这个黄色就是小明的私钥,小红和小偷都不知道。小明将自己的私钥黄色与公钥蓝色混合后,得到了一种不能分解的颜色,我们就叫“小明-蓝色”吧(虽然大家都知道黄+蓝变绿,但是这里我们为了知道是谁的混合色,还是以名字加公钥颜色来称呼),然后小明将“小明-蓝色”公布了出来。同样,小红听到了小明说用蓝色后,也选择了自己的私钥红色与公钥蓝色混合,得到了“小红-蓝色”并公布了出来。
此时,房间中小明、小红、小偷三人都知道了几个信息。
1.他们都用了蓝色
2.小明公布了“小明-蓝色”(小红和小偷不知道是什么颜料与蓝色的混合)
3.小红公布了“小红-蓝色”(小红和小偷不知道是什么颜料与蓝色的混合)
接下来,见证奇迹的时刻到了,小明拿到“小红-蓝色”与自己的私钥“黄色”混合,得到“小红-蓝色-小明”的新颜料。同样的,小红拿到“小明-蓝色”与自己的私钥“红色”混合,得到“小明-蓝色-小红”。大家发现了吗?“小红-蓝色-小明”和“小明-蓝色-小红”是一模一样的颜色。而小偷不知道小明和小红的私钥颜色,无法混合出与他们相同的颜色。
至此,共享密钥建立起来了。在了解了共享密钥的建立过程后,我们将告别实体颜料,采用数字的方式来建立共享密钥。
**注:**大家可能想到了,小偷可以根据自己的颜料与公钥“蓝色”混合,尝试得出“小明-蓝色”和“小红-蓝色”。这样的方法称之为穷举法,也就是尝试所有的可能性,进行信息破解,所以加密算法在理论上都是可以通过穷举法破解的,只不过实际上,超级计算机都需要计算万亿年才能穷举出所有可能性。
3.1.2 乘法把戏:
首先,我们假设乘法如同颜料混合一样,是不能分解的,看看如何用乘法与数字建立共享密钥。
小明公开了一个数字5,然后小明选择了一个私人数字4,然后利用乘法将两者混合起来,得到“小明-5”(20),接下来小红也选择了一个私人数字7得到“小红-5”(35),小明拿到35*4=140,小红拿到20*7=140。共享密钥建立完成。
大家也发现了,小偷知道20,35,5这三个数字后,用除法就能算出小明和小红的私钥。所以,接下来我们将了解实际使用中的如何使用乘法把戏来防止私钥被计算出来的。
3.2 迪菲–赫尔曼密钥交换算法我们都知道幂运算,但是要让计算机计算就比较难了。所以,我们会用幂运算作为建立共享密钥的乘法把戏。同时,我们还要了解钟算的原理,这里的钟可以理解成我们经常看到的时钟,我们常见的时钟最大是12,如果当前是10点,过了4个小时后,就变成了下午2点。也就是(10+4)mod12=2。了解了钟算和幂运算后,就开始进入正题吧。
还是小明、小红和小偷的房间,小明声明了钟为11,幂运算的底为2,接下来小明和小红分别选择了自己的私钥4和7。
第一步,小明混合自己的“小明-11,2”得到,小红混合自己的“小红-11,2”得到。
第二步,小明拿到“小红-11,2”(7)进行计算,小红拿到“小明-11,2”(5)进行计算。
大家注意到了吗,小明和小红建立了共享密钥3,而小偷无法根据已知的11,2,5,7这几个数字计算出密钥或小明小红的私钥。有了共享密钥后,小明和小红就可以安全进行加密传输了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3EfJxURd-1650622512759)( Java开源项目【ali1024.coding.net/public/P7/Java/git】 http://www.kaotop.com/file/tupian/20220424/e2ecb9093446ab6aaf364583a389a81d.png)]
3.3 AES对称加密过程AES 的全称是 Advanced Encryption Standard ,是最流行的对称加密算法,其加解密速度快。AES支持128位,192位,256位三种长度的密钥,密钥越长安全性越高。AES加密时会把明文切分成许多小块的明文,然后对每块明文单独加密,将加密后的密文传送出去,接收方再将密文切块解密,得到明文。
如下图所示:
上一步中小明和小红已经协商好了密钥3。接下来就可以通过对称加密进行通信了。
在小明、小红和小偷的房间中,小明想把密码“462315”告诉小红,于是:
第一步:将密码按照一位的长度进行切分(实际中通常按128位进行切分);就变成了“4”“6”“2”“3”“1”“5”;
第二步:对每块明文通过密钥3进行加密,结果就是“795648”,然后小明告诉小红和小偷:“我的密码是795648”;
第三步:小红拿到密文后,对密文进行切块,对每块通过密钥3进行解密,就得到了正确的密码“462315”,而小偷由于不知道密钥,就无法解密出正确的信息。
四、什么是非对称加密
在对称加密中,加密和解密使用的是同一份密钥。所以,在非对称加密中,加密和解密使用的是不同的密钥。非对称加密中的密钥分为公钥和私钥。公钥顾名思义就是公开的,任何人都可以通过公钥进行信息加密,但是只有用户私钥的人才能完成信息解密。非对称加密带来了一个好处,避免了对称式加密需要传输和保存同一份密钥的痛苦。
现在最流行的非对称加密算法就是RSA加密算法,具体是怎么做的呢,我们继续往下看。
4.1 AES对称加密过程维基百科是这么解释的:RSA加密算法是一种[非对称加密算法]((),在[公开密钥加密](()和[电子商业](()中被广泛使用。RSA是由[罗纳德·李维斯特](()(Ron Rivest)、[阿迪·萨莫尔](()(Adi Shamir)和[伦纳德·阿德曼](()(Leonard Adleman)在1977年一起提出的。当时他们三人都在[麻省理工学院](()工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。
最后既已说到spring cloud alibaba,那对于整个微服务架构,如果想要进一步地向上提升自己,到底应该掌握哪些核心技能呢?
就个人而言,对于整个微服务架构,像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等这些都是最最核心的知识,架构师必经之路!下图,是自绘的微服务架构路线体系大纲,如果有还不知道自己该掌握些啥技术的朋友,可根据小编手绘的大纲进行一个参考。
如果觉得图片不够清晰,也可来找小编分享原件的xmind文档!
且除此份微服务体系大纲外,我也有整理与其每个专题核心知识点对应的最强学习笔记:
-
出神入化——SpringCloudAlibaba.pdf
-
SpringCloud微服务架构笔记(一).pdf
-
SpringCloud微服务架构笔记(二).pdf
-
SpringCloud微服务架构笔记(三).pdf
-
SpringCloud微服务架构笔记(四).pdf
-
Dubbo框架RPC实现原理.pdf
-
Dubbo最新全面深度解读.pdf
-
Spring Boot学习教程.pdf
-
SpringBoo核心宝典.pdf
-
第一本Docker书-完整版.pdf
-
使用SpringCloud和Docker实战微服务.pdf
-
K8S(kubernetes)学习指南.pdf
另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!
ker实战微服务.pdf
- K8S(kubernetes)学习指南.pdf
[外链图片转存中…(img-Px3Ecc2A-1650622512760)]
另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!
[外链图片转存中…(img-1Cr6vb43-1650622512760)]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)