前端加密crypto-js使用

最近项目涉及到敏感数据,为了信息安全,需要对数据进行接口加密处理,会使用一些算法进行加密,常见的AES对称加密、RSA非对称加密、MD5散列、base64编码等。关于这些加密方式,网上有许多工具和案例,今天主要分享下前端加密类库crypto-js。

1.crypto-js支持的加密算法

名称 加密方式 简单描述
MD5 哈希/散列 MD5信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致
SHA-1 哈希/散列 安全散列算法1,是一种密码散列函数,可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数
SHA-256 哈希/散列 SHA-2的一种算法标准,对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,通常用一个长度为64的十六进制字符串来表示
HMAC 哈希/散列 HMAC运算利用hash算法,以一个消息M和一个密钥K作为输入,生成一个定长的消息摘要作为输出
PBKDF2 哈希/散列 PBKDF2应用一个伪随机函数以导出密钥。通过password和salt进行hash,然后将结果作为salt在与password进行hash,多次重复此过程,生成最终的密文。
AES 对称加密 高级加密标准,替代之前的DES加密算法,通常采用128位16个字节初始向量IV的CBC模式
RC4 对称加密 RC4和DES算法一样,是一种对称加密算法,以字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密
其他 参照crypto-js -

2.实现AES加密解密实现

  • 首先引入 crypto-js,我们可以采用 npm install crypto-js --save 进行下载安装
  • 其次就是在js文件中写两个方法,用于加密与解密
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import CryptoJS from'crypto-js'
// 密钥
const key = CryptoJS.enc.Utf8.parse(`yunxiao-${moment().format('YYYYMMDD')}`)
// 密钥偏移量
const iv = CryptoJS.enc.Utf8.parse('1234567890123456')

//加密方法
function AESEncryption(word) {
let srcs = CryptoJS.enc.Utf8.parse(word)
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
return encrypted.toString()
}
//解密方法
function AESDecrypt(word) {
let decrypted = CryptoJS.AES.decrypt(word, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
return decrypted.toString(CryptoJS.enc.Utf8)
}

export default {
AESEncryption,
AESDecrypt
}


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!