Skip to content

对称加密和非对称加密的应用


什么是对称加密

  • 定义:

    对称密钥算法(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥

  • 优点:

    算法公开、计算量小、加密速度快、加密效率高,适合对大量数据进行加密的场景。 比如 HLS(HTTP Live Streaming)普通加密场景中,一般会使用 AES-128 对称加密算法对 TS 切片进行加密,以保证多媒体资源安全

  • 缺点:

    安全性不高,只要拿到秘钥就可以把数据解开

  • 对称加密的过程:

    发送方使用密钥将明文数据加密成密文,然后发送出去,接收方收到密文后,使用同一个密钥将密文解密成明文读取 "img"

  • 个人理解:

    对称加密就好比一把锁的钥匙,一个密码箱存了东西,如果你有钥匙就可以把密码箱里面的宝贝取走


概要内容


什么是非对称加密

  • 定义:

    非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。 因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法

  • 优点:

    安全性更高,公钥是公开的,私钥是自己保存的,不需要将私钥提供给别人

  • 缺点

    加解密速度慢,只适合应对小数据加解密

  • 对称加密的过程: "img"

  • 个人理解

    非对称加密:公钥就好比未锁的密码箱,只能存东西进去然后锁住。秘钥就好比密码箱的钥匙,可以打开秘密箱然后把里面的宝贝取走

  • 非对称加密demo

this.rsaEncryptor = new JSEncrypt();
this.rsaEncryptor.setPublicKey(this.rsa_pub_key);
this.rsaDecryptor = new JSEncrypt();
this.rsaDecryptor.setPrivateKey(this.rsa_pri_key);

/**
* RSA 加密
* @param content
* @returns {CipherParams|PromiseLike<ArrayBuffer>}
* @private
*/
__rsaEncrypt(content) {
    return this.rsaEncryptor.encrypt(content);
},
/**
* RSA 解密
* @param content
* @returns {WordArray|PromiseLike<ArrayBuffer>}
* @private
*/
__rsaDecrypt(content) {
    return this.rsaDecryptor.decrypt(content);
},

对称加密demo


介绍一套可行混合加密方案,怎么应用到接口数据加密中。流程图如下

  • 思路如下:
    • 第1步:创建一套RSA 公私钥,公钥前端拿着,私钥服务端拿着
    • 第2步:前端为每一个网络请求生成RequestID
    • 第3步:客户端生成AES Key,然后将RequestID 作为Key,AES Key 作为Value 存内存
    • 第4步:客户端用生成的AES Key 加密请求数据Request Data,用RSA公钥对AES Key进行加密,同时把requestID、加密数据、加密AES Key 发送给服务端
    • 第5步:服务端用RSA私钥解密被加密的AES Key,然后再用解开的AES Key 对RequestData数据进行解密
    • 第6步:服务端用AES Key对响应数据ResposneData加密+RequestID、返回给前端
    • 第7步:前端根据服务端返回的RequestID 取出内存的AES key, 用AES key 解密Resposne Data数据,用完后删除内存RequestID 的AES key 数据。
    • 最后:前端每次发送请求都创建AES Key 去加密数据,收到服务端响应数据解密用完后,就删除掉内存中的AES Key数据,如此循环就用一套RSA公私钥解决混合加密问题
  • 流程图: "img"

对称加密与非对称加密组合使用


参考文献


Demo源码工程


以上: 如发现有问题,欢迎留言指出,我及时更正

Released under the MIT License.