美文网首页
前端加解密

前端加解密

作者: kingller | 来源:发表于2020-04-17 17:13 被阅读0次

HTTPS通信过程

HTTPS通信过程
HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。

SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均支持SSL,其最新的版本是3.0

TLS的全称是Transport Layer Security,即安全传输层协议,最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。

HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。

https流程图

下面我们模仿HTTPS的模式实现前后端加解密。

这里非对称加密算法我们选择使用RSA,对称加密使用AES

  1. 服务端生成非对称加密(RSA)的一对公钥私钥,并将公钥(publicKey)发送给客户端。
  2. 客户端生成对称加密(AES)密钥(secretKey),并用服务端发送的公钥(publicKey)使用RSA算法加密,将其发送给服务端
  3. 服务端接收到密文后,用RSA私钥(privateKey)解密,得到对称加密(AES)密钥(secretKey)。
    此时,服务端、客户端同时拥有该密钥,使用对称加密(AES)加密解密消息体。

Web端实现

这里我们使用client-crypto来实现加解密。

Install

npm install client-crypto

Usage

RSA

加密

import Crypto from 'client-crypto';

Crypto.RSA.encrypt('secretKey', 'publicKey');

解密

import Crypto from 'client-crypto';

Crypto.RSA.encrypt('encryptedKey', 'privateKey');

AES

默认使用gcm模式。

createKey 生成密钥

import Crypto from 'client-crypto';

Crypto.AES.createKey();

使用该方法生成密钥后,会缓存该密钥,使用加密(encrypt)或解密(decrypt)方法时也可不提供密钥。

encrypt 加密

import Crypto from 'client-crypto';

Crypto.AES.encrypt(data, '密钥');

该方法会先执行JSON.stringify(data),将数据转为json格式的字符串,然后使用AES加密。

decrypt 解密

import Crypto from 'client-crypto';

Crypto.AES.decrypt('encrypted message', '密钥');

该方法会使用AES解密,再执行JSON.parse,获取数据。

服务端

RSA

这里我们使用NodeJs作为服务端示例。
可以使用node-rsa

Install

npm install node-rsa

生成密钥

import * as RSA from 'node-rsa';

const rsaKey = new RSA({ b: 512 });
rsaKey.setOptions({
    encryptionScheme: 'pkcs1'
});

// 公钥 - 用来发送给客户端
const PUBLIC_KEY = Buffer.from(rsaKey.exportKey('pkcs8-public-der')).toString('base64');

解密

const secretKey = rsaKey.decrypt('密钥加密密文', 'utf8');

AES

服务端的AES实现可参考 AES对称加解密

相关文章

  • 加解密与前端应用

    [TOC] 前端加解密 参考文档:SubtleCrypto:https://developer.mozilla.o...

  • 前端加解密

    HTTPS通信过程 HTTPS通信过程HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传...

  • 前端crypto-js aes加解密

    背景 公司后端加解密使用的是 aes 的方式,当时找了好多前端加解密的库,最后决定使用 crypto-js 封装了...

  • 前端数据加解密

    前言 没有使用https协议时,数据没有加密,入网安全测评不通过这里记录一下数据加解密。 一、封装加解密方法 se...

  • AES 和RSA加解密

    AES 加解密 RSA 加解密

  • NodeJS 加解密之 crypto 模块

    我们前端一般会很少接触加解密方面的知识,后端对这方面了解的可能比较多,但是作为一个不安分的前端,绝对有必要学习下加...

  • AES加解密,js前端和java后端实现

    AES加解密,具体的介绍就不说了,觉得自己理解还不够,具体自己百科 直接上代码Javascript前端使用Cryp...

  • 前端Base64加解密

  • crypto.js 前端加解密

    简介 crypto-js是谷歌开发的一个纯JavaScript的加密算法类库,可以非常方便的在前端进行其所支持的加...

  • js加解密与后端联调

    公司要求前端html页面,像后台发送数据的时候,进行加解密(DES、base64)和签名(md5),就在网上查了各...

网友评论

      本文标题:前端加解密

      本文链接:https://www.haomeiwen.com/subject/bkdyvhtx.html