zoukankan      html  css  js  c++  java
  • 加密算法:对称加密和非对称加密

    对称加密算法

      所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。

      对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。

      对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

    常见的对称加密算法有DES、3DES、AES、Blowfish、IDEA、RC5、RC6。

    非对称加密算法

      非对称加密(公钥加密):指加密和解密使用不同密钥的加密算法,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。假设A用B的公钥加密消息,用A的私钥签名,B接到消息后,首先用A的公钥验证签名,确认后用自己的私钥解密消息。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得 十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以通过信息发送者的公钥来验证信息的来源是否真实,还可以通过数字签名确保发送者无法否认曾发送过该信息。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。

    工作原理

      1.A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。

      2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
      3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
      4.A将这个消息发给B(已经用B的公钥加密消息)。
      5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
    这种加密算法应用非常广泛,SSH, HTTPS, TLS,电子证书,电子签名,电子身份证等等。
    如何保证他人的公钥是不是他自己的?也就是防止公钥信息被人偷换了。
      做法就是设立一个证书中心。具体可以参考这篇文章: 数字签名、数字证书、加密算法

    如何防止传输的信息被篡改?

    MD5防止数据被篡改的做法(信息-摘要算法5) 

      大致思路是把发送的数据(用src表示)和一段我们自己才知道的字符串(用key表示),通过一个算法变为一段签名文本(用sign表示)。  在服务器端接收到数据src和sign后,用相同的算法计算出签名文本(用sign1)表示。比较sign和sign1是否一致。如果一致表明数据(src)没有被篡改。

    一、算法需求

      怎么简单理解“签名校验”呢?

      首先需要找到一个函数f(x),   通过src,key求得sign,如下:

      sign   = f(src,key);

    这个函数f(x)要满足一下几个条件

    1、容易计算,有大量内容需要签名时,  速度很重要

    2、压缩性,不管src多大计算出的sign需要保持定长。  方便比较,且不至于大量消耗内存空间

    3、抗修改,对原数据进行任何改动,  哪怕只修改1个字节,得到的sign值都有很大区别

    4、强抗碰撞(不可逆),  知道sign,想反解出src和key不可能或非常困难。即找不到函数f(x)的可逆函数

    二、具体做法

    f(x)选用MD5算法,  MD5全名Message-Digest Algorithm 5(信息-摘要算法)是一种不可逆的加密算法。

    1、参数处理,  将需要签名校验的参数以及对应的值按照一定规则处理成字符串src

    2、令signSrc  = src+key

    3、sign =  MD5Encrypt.getMessageDigest(signSrc);

    客户端按照这个方法计算得到sign,服务端再按相同方法计算得到sign1,  比较两者是否一致,即可完成校验。

    非对称加密算法的公钥和是要如何生成的,生成的私钥是如何解密公钥的内容的?

    请看: RSA算法原理

  • 相关阅读:
    达叔系列——神经网络编程基础
    win10安装pytorch——前面有坑,快跳进去鸭
    Python基础(六)——面向对象编程
    Python基础(五)——闭包与lambda的结合
    Python基础(四)——迭代器/对象,生成器
    Mysql优化(出自官方文档)
    Mysql优化(出自官方文档)
    Scala语言笔记
    Scala语言笔记
    Scala语言笔记
  • 原文地址:https://www.cnblogs.com/myseries/p/8654643.html
Copyright © 2011-2022 走看看