import cryptojs from 'crypto-js' var codecutil = {} export default codecutil //全局导出对象 //MD5(Message-Digest Algorithm),信息摘要算法 //一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致 codecutil.md5 = function (data) { return cryptojs.MD5(data).toString() } //SHA1(Secure Hash Algorithm 1),安全散列算法, //SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数 codecutil.sha1 = function (data) { return cryptojs.SHA1(data).toString() } //SHA256(Secure Hash Algorithm 1),安全散列算法, //对于任意长度的消息,SHA256都会产生一个256位的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,共256位,通常由一个长度为64的十六进制字符串来表示 codecutil.sha256 = function (data) { return cryptojs.SHA256(data).toString() } //解析密钥 codecutil.aesDeKey = function (key) { return cryptojs.enc.Utf8.parse(key) } //aes加密 codecutil.aesEncode = function (data, key) { if (data && key) { let aesKey = cryptojs.enc.Utf8.parse(key) //将密钥按照utf8格式化 let content = cryptojs.enc.Utf8.parse(data)//将明文按照utf8格式化 //加密后已经是base64编码格式的数据 const ciphertext = cryptojs.AES.encrypt(content, aesKey, { iv: aesKey, mode: cryptojs.mode.CBC, padding: cryptojs.pad.Pkcs7 }).toString() return ciphertext } else { return '' } } //aes解密 codecutil.aesDecode = function (data, key) { if (data && key) { var ciphertext = codecutil.base64Decode(data) // var bytes = cryptojs.AES.decrypt(ciphertext, key, { mode: cryptojs.mode.ECB, padding: cryptojs.pad.Pkcs7 }) var bytes = cryptojs.AES.decrypt(ciphertext, key, { mode: cryptojs.mode.CBC, padding: cryptojs.pad.Pkcs7 }) var plaintext = bytes.toString(cryptojs.enc.Utf8) return plaintext } else { return '' } } //base64加密 codecutil.base64Encode = function (data) { if (data) { var bytes = cryptojs.enc.Utf8.parse(data) var plaintext = bytes.toString(cryptojs.enc.Base64) plaintext = plaintext.toString() // plaintext = plaintext.replace(/\//g, '_') // plaintext = plaintext.replace(/\+/g, '-') // plaintext = plaintext.replace(/=/g, '') return plaintext } else { return '' } } //base64解密 codecutil.base64Decode = function (data) { if (data) { var ciphertext = data.toString() ciphertext = ciphertext.replace(/_/g, '/') ciphertext = ciphertext.replace(/-/g, '+') for (var i = 0; i < 4 - ciphertext.length % 4; i++) { ciphertext = ciphertext + '=' } var bytes = cryptojs.enc.Base64.parse(ciphertext) var plaintext = bytes.toString(cryptojs.enc.Utf8) return plaintext } else { return '' } } codecutil.hexEncode = function (data) { if (data) { var bytes = cryptojs.enc.Utf8.parse(data) var plaintext = bytes.toString(cryptojs.enc.Hex) return plaintext } else { return '' } } codecutil.hexDecode = function (data) { if (data) { var bytes = cryptojs.enc.Hex.parse(data) var plaintext = bytes.toString(cryptojs.enc.Utf8) return plaintext } else { return '' } }