|
|
@@ -0,0 +1,66 @@
|
|
|
+import CryptoJS from 'crypto-js'
|
|
|
+const keyStr = '1234567890123456'
|
|
|
+export default {
|
|
|
+ // 加密
|
|
|
+ encrypt(word) {
|
|
|
+ // 判断是否存在keyStr,不存在就用默认的keyStr(注意:这个keyStr必需要前后端统一,不然双方加密解密后会不相同。调用generatekey方法生成)
|
|
|
+ // keyStr = keyStr ? keyStr : '1grLx91U40VawzhRAm7E'
|
|
|
+ const key = CryptoJS.enc.Utf8.parse(keyStr)
|
|
|
+ const srcs = CryptoJS.enc.Utf8.parse(word)
|
|
|
+ const encrypted = CryptoJS.AES.encrypt(srcs, key, {
|
|
|
+ mode: CryptoJS.mode.ECB,
|
|
|
+ padding: CryptoJS.pad.Pkcs7
|
|
|
+ })
|
|
|
+ return encrypted.toString()
|
|
|
+ },
|
|
|
+ // AES的ECB加密(还有CBC模式)
|
|
|
+ encryptECB(word) {
|
|
|
+ // 这里是密钥
|
|
|
+ var keyHex = CryptoJS.enc.Utf8.parse(keyStr)
|
|
|
+ // 这里是demo样本 一些是json,
|
|
|
+ // var plaintText = "{'a':'SSS'}"
|
|
|
+ // 一些是string
|
|
|
+ var plaintText = word
|
|
|
+
|
|
|
+ // 用ECB进行加密
|
|
|
+ var encryptedData = CryptoJS.AES.encrypt(
|
|
|
+ // JSON.stringify(plaintText),
|
|
|
+ plaintText,
|
|
|
+ keyHex,
|
|
|
+ {
|
|
|
+ // iv: CryptoJS.enc.Utf8.parse('0000000000000000'), // 16位
|
|
|
+ mode: CryptoJS.mode.ECB, // 加密模式
|
|
|
+ padding: CryptoJS.pad.Pkcs7
|
|
|
+ })
|
|
|
+ // 打印出加密后的
|
|
|
+ // console.log(encryptedData.toString(), '加密后')
|
|
|
+ return encryptedData.toString();
|
|
|
+ },
|
|
|
+
|
|
|
+ // 解密
|
|
|
+ decrypt(word) {
|
|
|
+ // 这里是密钥
|
|
|
+ var keyHex = CryptoJS.enc.Utf8.parse(keyStr)
|
|
|
+ // 这里需要将16进制的数据转为base64
|
|
|
+ // var encryptedBase64Str = CryptoJS.enc.Hex.parse(word)
|
|
|
+ // // console.log('解密前Base64:' + encryptedBase64Str)
|
|
|
+ // var str = CryptoJS.enc.Base64.stringify(encryptedBase64Str)
|
|
|
+ // console.log("str=",str)
|
|
|
+ // 接下来就是解密了,讲最后Base64形式的进行解密
|
|
|
+ var decryptedData = CryptoJS.AES.decrypt(
|
|
|
+ word,
|
|
|
+ keyHex,
|
|
|
+ {
|
|
|
+ // iv: CryptoJS.enc.Hex.parse('0000000000000000'), // 16位
|
|
|
+ mode: CryptoJS.mode.ECB, // 加密模式
|
|
|
+ padding: CryptoJS.pad.Pkcs7
|
|
|
+ }
|
|
|
+ )
|
|
|
+ return CryptoJS.enc.Utf8.stringify(decryptedData).toString()
|
|
|
+ // console.log("decryptedData=",decryptedData)
|
|
|
+ // 这里会产生制表符需要清除掉(如果解密后数据少于16位会以空格补齐)
|
|
|
+ // return decryptedData.toString(CryptoJS.enc.Utf8).replace(/\0/g, '')
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+}
|