crypto-js aes 加解密

首先安装cryptojs

npm install crypto-js

import CryptoJS from 'crypto-js'  // 引入CryptoJS


const key = CryptoJS.enc.Utf8.parse('47FC4124CF94E070') // 密钥

const iv = CryptoJS.enc.Utf8.parse('ovOh2xYoRdfATob6') // 密钥偏移量

// 加密方法
const AesEncode = function (word) {
    let srcs = CryptoJS.enc.Utf8.parse(word);
    // 对称加密算法主要有AES、DES、3DES / 非对称加密算法主要有RSA、DSA、RCC
	// iv(初始变量)
    // key(加密密钥)
    // mode(加密模式 主要有CBC(默认)、CFB、CTR、OFB、ECB)
    // padding(填充方式 主要有Pkcs7(默认)、Iso97971、AnsiX923、Iso10126、ZeroPadding)

    let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
    let encryptedBase64Data = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
    return encodeURIComponent(encryptedBase64Data);
}

// 解密方法
const AesDecode = function (word) {
	word = decodeURIComponent(word)
	let encryptedHexStr = CryptoJS.enc.Base64.parse(word);
	let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
	let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
	let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
	return decryptedStr.toString();
}

加密示例如下:
// 对hello进行加密
let str = AesEncode('hello')
console.log(str) // k1sj3bcoa%2BOWfzgEZyqYeA%3D%3D

// 对hello进行解密
let str1 = AesDecode('k1sj3bcoa%2BOWfzgEZyqYeA%3D%3D')
console.log(str1) // hello

cryptojs 采用的是对称加密,下面再来聊聊对称加密和非对称加密的差异:

对称加密
优点:算法公开、计算量小、加解密的效率高、加密速度快(加密和解密使用相同的密钥)
缺点:密钥的管理和分发上比较困难,不是非常安全,密钥管理负担很重


非对称加密
优点:安全性更高,公钥是公开的,密钥是自己保存的,不需要将私钥给别人
缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密


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

你可能感兴趣的:(javascript,前端,java)