当前位置: 首页 > 后端技术 > Java

面试官:说说对称加密、非对称加密、混合加密?毫无意义,.

时间:2023-04-02 02:00:13 Java

来源:liuchenyang0515.blog.csdn.net/article/details/109263510对称加密的双方使用相同的密钥进行加密和解密。A通过一定的算法对明文进行加密得到密文,然后将密文发送给B,B收到密文后使用相同的密钥执行相同的算法进行解密。X没有密钥,即使窃取密文也无法窃听。对称加密有优点也有缺点对称加密的优点:加解密速度快对称加密的缺点:会存在密钥分发问题;密钥容易复制,不易安全保管密钥分发问题对称加密有一个密钥分发问题,A如何将私钥安全传给B而不被X获取?A直接把密钥发给B也可能被X盗走,所以加密信息无异于裸奔。只有用密钥加密过的信息才能安全传输,但是只有在保证安全传输的前提下才能发送密钥。这个原理和下图是一样的。非对称加密使用不同的密钥进行加密和解密,不能从一个密钥派生出另一个密钥。公钥加密,私钥解密私钥加密(数字签名),公钥解密A事先准备了一对非对称密钥对,分别是公钥和私钥,这对非对称密钥对可以相互加密和解密。公钥是公开的,私钥只有你自己能用。然后A把公钥发给B,或者公钥放在服务器B上自己下载。B得到公钥后,用公钥的一套算法加密信息后传给A,A用私钥执行另一种算法解密得到明文信息。推荐一个开源免费的SpringBoot最全教程:https://github.com/javastacks/spring-boot-best-practice非对称加密的优缺点非对称加密的优缺点:无密钥分发问题非对称加密缺点:加解密速度慢,还有被窃听的隐患。道理和后面讲到的中间人攻击是一样的。既然对称加密和非对称加密都有缺点,那么我们是否可以使用一种方法来结合它们的优点,形成更好的解决方案呢?答案是肯定的,就是混合加密。混合加密在传输大量数据时使用对称加密,因为加密和解密速度很快。但是,由于对称加密存在密钥分发问题,所以我们采用非对称加密,将对称密钥加密后再传递给对方。我们会觉得接下来的计划应该会更完美吧?在双向通信之前,必须相互交换公钥。例如,A和B想交流。A:这是我的公钥public_A,你留着,你生成对称密钥给我。B:好的,public_A收到了,你把对称密钥secretKey保存起来。然后用public_A加密这个secretKeyA:private_A收到消息后,解密secretKey。这样就解决了对称密钥secretKey的密钥分发问题,然后双方就可以使用secretKey加密消息进行通信了。但这还不够,这仍然是中间人!把公钥发给对方怎么知道公钥没有被篡改呢?比如上面的例子,被中间人攻击后,就变成了下面这个A:这是我的公钥public_A,你留着,你生成一个对称密钥给我。X获得了A的公钥,并把自己的公钥public_X发给了B...B,傻子以为真的是A的公钥。B:好的,公钥public_X已经收到了,并且生成对称密钥secretKey,然后用public_X加密对称密钥。X截获这条消息,用自己的私钥private_X解密对称密钥secretKey,自己生成一个secretKeyXXX用public_A加密后发给A。A,你们傻逼以为以后会用secretKey安全通信吗?哈哈哈A:private_A收到消息后解密了对称密钥secretKeyXXX(其实是X篡改了)X心想,这两个白痴真以为接下来要用对称密钥加密是安全的,不过我想听听A和B在窃窃私语。上图中,中间人X不仅可以获取到A和B之间的通信内容,还可以任意修改,相当于代理抓包修改数据。我们平时使用的抓包工具都是需要安装证书的,也就是你骗过自己的电脑,充当中介查看网络通信的数据,方便学习和使用。上面混合加密的例子已经涉及到数字签名。混合加密解决了对称密钥分发的问题。这个例子在后面对数字签名的中间人攻击的讲解中也会提到。可以回过头再看。中间人攻击其实就是数字签名的存在。缺乏。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!