通信加密原理

通信加密原理一、历史:消息通信时都需要加密,如果不加密,在请求和响应的过程中,如果消息中途被黑客劫持或篡改后果不堪设想。如图所示:1976年以前,所有的加密方法都是同一种模式:对称加密1、客户端C选择某一种加密规则K,对信息进行加密,然后将加密的信息传递给服务端S;2、服务端S接收到加密的信息后…

大家好,又见面了,我是你们的朋友全栈君。

一、历史:

        消息通信时都需要加密,如果不加密,在请求和响应的过程中,如果消息中途被黑客劫持或篡改后果不堪设想。如图所示:

通信加密原理

        1976年以前,所有的加密方法都是同一种模式:对称加密

                1、客户端C选择某一种加密规则K,对信息进行加密,然后将加密的信息传递给服务端S;

                2、服务端S接收到加密的信息后,使用同一种规则K,对加密的信息进行解密。

通信加密原理

        由于加密和解密使用同样规则(简称”密钥”),所以被称为”对称加密算法”(Symmetric-key algorithm)。这种加密模式有一个最大弱点:客户端必须把加密规则K告诉服务端,否则无法解密。传递和保存这个密钥K,就成了最头疼的问题,因为密钥K在传输过程中一旦被泄露,就可以被黑客解密所有的信息。

       现实情况更复杂,一般服务端会有多个客户端,如果服务端和这几个客户端都是用的同一个加密规则,也就是说虽然加密了,但所有人都知道是怎么加密的,那加密是没有意义的。所以一般不会只用同一个密钥,而是不同的客户端采用不同的密钥加解密。但这个密钥也只能使用非对称加密算法加密后传递,因为如果使用对称加密算法加密,永远都需要传递加密规则。

        1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为”Diffie-Hellman密钥交换算法”。

通信加密原理

        这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。这种新的加密模式被称为”非对称加密算法”,有如下特点:

        1、密钥是两个,一个是公钥,一个是私钥;

        2、公钥是对任何人开放的,但私钥只有服务端才知道;

        3、公钥加密的信息,不能被公钥解密,只能被私钥解密;

通信加密原理

        1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的”非对称加密算法”。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。

通信加密原理

        这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。如果想深入了解RSA算法细节请移步阮一峰大神的博客:http://www.ruanyifeng.com/blog/,本文参考目录有他具体对RSA算法的实现细节的文章地址。

        如果公钥加密的信息只有私钥解得开,公钥虽然谁都可以获取,但私钥不用传递也就不会泄漏,通信就是安全的。这样虽然只保证了单向的客户端传递给服务端的信息被安全加密,但已经足够了。唯一的问题是如何保证服务端传递给客户端的公钥就是服务端真正的公钥而不是被篡改的公钥呢?众所周知,在https中可以通过CA来进行公证,而ssh的公钥和私钥都是服务端自己生成的,没法公证,只能通过客户端自己对公钥进行确认。

二、对称加密算法

        也叫私钥加密算法,是最快速、最简单的一种加密方式。加密(encryption)与解密(decryption)用的是同样的密钥(secret key),对称加密通常使用相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。

        缺点是密钥的管理与分配,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

        常见的算法有:DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。

三、非对称加密算法

        也叫公钥加密算法,虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去,唯一要注意的是如何确保公钥没有被篡改。

        常见的算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。

 

参考:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

           http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140777.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java 中级面试题_java中级面试题[通俗易懂]

    java 中级面试题_java中级面试题[通俗易懂]本帖最后由唯我独赞mo于2015-11-1222:47编辑1、java中wait和sleep有什么区别?多线程条件下如何保证数据安全?答:最大区别是等待时wait会释放锁,而sleep会一直持有锁,wait通常用于线程时交互,sleep通常被用于暂停执行。2、java中volatile和synchronized有什么区别?1.volatile本质是在告诉jvm当前变量在寄存器(工作内存…

    2022年10月12日
  • Boost.Lockfree无锁结构

    Boost.Lockfree无锁结构[译]https://beta.boost.org/doc/libs/1_72_0/doc/html/lockfree.html boost.Lockfree无锁结构学习

  • java实现四种常用排序算法

    java实现四种常用排序算法四种常用排序算法冒泡排序特点:效率低,实现简单思想(从小到大排):每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往前排。publicvoidbubbleSort(intarray[]){intt=0;for(inti=0;i<…

  • 电路实习报告:简易收音机的焊接

    电路实习报告:简易收音机的焊接本文是本科生电路实习(焊接部分)的实习报告

    2022年10月24日
  • css设置背景图片大小自适应_css设置整个页面背景图片

    css设置背景图片大小自适应_css设置整个页面背景图片background:pink;图片在背景图上面background-image:url(food.jpg);一张图片铺满一行background-repeat:repeat-x;同一张图片多张铺满

  • SQL数据库之索引优缺点

    SQL数据库之索引优缺点 SQL数据库之索引使用原则及利弊 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 优点通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。  可以大大加快数据的检索速度,这也是创建索引的最主要的原因。  可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。  在使用分组和排序子句进行数据检索时,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号