此篇文章没有干货,仅仅是为了记录自己使用3DES加密的问题。为了以后翻起来能找的到。闲话说叙。项目是用NodeJs+vue+element_UI库搭建而成。所以直接npm模块引入了:
crypto-js模块引入:
npm install crypto-js --save
npm install js-base64 --save复制代码
1、原始方法:
let Base64 = require("js-base64").Base64
let CryptoJS = require("crypto-js")复制代码
//加密
encryptByDES(message, key){
//对key值做处理
const keyHex = CryptoJS.enc.Utf8.parse(key);
const encrypted = CryptoJS.DES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
const str = encrypted.toString();
//Base64加密
return Base64.encode(str)
}
//解密
decryptByDES(str, key){
//先解base64
const ciphertext = Base64.decode(str);
//处理key值
const keyHex = CryptoJS.enc.Utf8.parse(key);
// direct decrypt ciphertext
const decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
const _key = 'abcdefghijklmn'
const _password = '123456'
//加密
console.log(this.encryptByDES(_password,_key))
//解密
console.log(this.decryptByDES(_password,_key))复制代码
2、简单方法:直接加密存库
import sha256 from 'crypto-js/sha256';
import hex from 'crypto-js/enc-hex';复制代码
hex.stringify(sha256(this.model.password))复制代码
3、采坑总结,建议传入参数都为字符串,不然会出错。如果是obj的话,可以用JSon.stringgify()转一下。还是不要单用3DES,用3DES加密之后再用Base64加密,保证是4的倍数。因为其解密不是4的倍数会出错的。