• 对称加密与非对称加密


    The Principle of Encryption/Decryption
    加密解密流程:
    <pre lang="c" escaped="true" line="1">
    plaintext(明文)->encryption->ciphertext(密文)->decryption->plaintext(明文)
    CT = f1(PT, key)
    PT = f2(CT, key)
    </pre>

    根据key的不同分为两种加密协议:
    <h4>对称加密</h4>
    <ul>

    <li>传统加密或者对称加密:Conventional Encryption. 加密的速度快,用同一把密钥进行加解密。但是传递密钥是个问题。</li>

    <li>对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。</li>

    </ul>


    对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;
    但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。
    <pre lang="bash" escaped="true" line="1">openssl enc -ciphername -k password -in file -out file</pre>
    <ul>
    <li>enc:加密</li>

    <li>-ciphername:密码的算法,你选用哪一种密码算法。</li>

    <li>-k: 表示口令</li>

    </ul>


    <pre lang="bash" escaped="true" line="1">openssl enc -ciphername -k password -d -in file -out file</pre>
    <ul>

    <li>-d: 解密</li>


    <li>ciphers: base64, des, des3, rc2, rc5, aes256</li>

    <li>base64:不是加密算法。</li>

    </ul>

    例子:
    利用des3进行加密:
    <pre lang="bash" escaped="true" line="1">openssl enc -des3 -k emacsvi -in pt.txt -out ct.bin</pre>
    加密后进行解密:
    <pre lang="bash" escaped="true" line="1">openssl enc -des3 -d -k emacsvi -in ct.bin -out pt1.txt</pre>


    <h4>非对称加密体系:公钥加密体系</h4>
    <ul>
    <li>public key:公钥只能加密,不能解密</li>
    <li>private key:私钥只能解密,不能加密。</li>

    </ul>
    非对称加密(Asymmetric Cryptography)
    非对称加密为数据的加密与解密提供了一个非常安全的方法,
    它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。
    非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。
    比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,
    因此安全性大大提高。

    目前最常用的非对称加密算法是RSA算法,是Rivest, Shamir, 和Adleman于1978年发明,

    虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。为了解释这个过程,请看下面的例子:

    <ol>
    <li>Alice需要在银行的网站做一笔交易,她的浏览器首先生成了一个随机数作为对称密钥。</li>

    <li>Alice的浏览器向银行的网站请求公钥。</li>

    <li>银行将公钥发送给Alice。</li>

    <li>Alice的浏览器使用银行的公钥将自己的对称密钥加密。</li>

    <li>Alice的浏览器将加密后的对称密钥发送给银行。</li>

    <li>银行使用私钥解密得到Alice浏览器的对称密钥。</li>

    <li>Alice与银行可以使用对称密钥来对沟通的内容进行加密与解密了。</li>
    </ol>

    <h4>总结</h4>

    <ol>
    <li>对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。</li>

    <li>非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。</li>

    <li>解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。</li>

    </ol>

  • 相关阅读:
    2017年计划安排
    Angular企业级开发(4)-ngResource和REST介绍
    Angular企业级开发(3)-Angular MVC实现
    Angular企业级开发(2)-搭建Angular开发环境
    Angular企业级开发(1)-AngularJS简介
    复习下C 链表操作(双向链表)
    复习下C 链表操作(单向循环链表、查找循环节点)
    复习下C 链表操作(单向链表)
    隐藏状态栏
    关于CALayer 中的contents(图片) 拉伸
  • 原文地址:https://www.cnblogs.com/liweilijie/p/4984079.html
Copyright © 2020-2023  润新知