虽说在前端加密有点点画蛇添足的意味,但做了出来,也会觉得有一定的意义.......(省略很多感叹)
前端技术栈:vue.js
AES加解密技术栈:crypto-js
操作如下:
1.安装crypto-js npm install crypto-js --save
2.导入 import CryptoJS from 'crypto-js/crypto-js'
3.AES加解密代码如下,备注:重点要关注mode跟padding需跟解密方一致,比如,在混合式开发中,H5跟native要保持一致,亦要跟不同的后端语言保持一致
/**
* AES加密
*/
const encryptAes = (word,key) => {
//console.log(CryptoJS)
const keys = CryptoJS.enc.Utf8.parse(key)
const ivs = CryptoJS.enc.Utf8.parse('tstlafljatwea')
let encryptedWord = CryptoJS.enc.Utf8.parse(word)
var encrypted = CryptoJS.AES.encrypt(encryptedWord, keys, { iv: ivs,mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
return encrypted.toString()
}
/**
* AES解密
*/
const decryptAes = (encrypted,key) => {
const keys = CryptoJS.enc.Utf8.parse(key)
const ivs = CryptoJS.enc.Utf8.parse('tstlafljatwea')
var decrypted = CryptoJS.AES.decrypt(encrypted, keys, { iv: ivs,mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
//console.log(decrypted)
//console.log(decrypted.toString(CryptoJS.enc.Utf8))
return decrypted
}
另外再提多一嘴,到此文发出时刻前,crypto-js仍未支持RSA非对称加密,如需使用,可以使用security.js(地址自行百度)或者jsencrypt.js(https://github.com/openstack/xstatic-jsencrypt/blob/master/xstatic/pkg/jsencrypt/data/jsencrypt.js)
RSA加解密技术栈:node-rsa
/**
* RSA加解密
*/
const encryptRsa = (message,publicKey) => {
//加密
const NodeRSA = require('node-rsa')
var key = new NodeRSA();
key.setOptions({encryptionScheme: 'pkcs1'}) // (此处是重点关注对象,如果多端加解密对应不上,请修改此处,更多细节参考node-rsa文档 )
key.importKey(publicKey,"pkcs8-public")
var x = key.encrypt(message, 'base64');
//console.log('加密串:',x)
return x
//解密
// var key2 = new NodeRSA();
// key2.setOptions({encryptionScheme: 'pkcs1'})
// key2.importKey('请使用私钥','pkcs8-private')
// console.log('使用私钥解密后的串:' + key2.decrypt(x,'utf8'))
}
说了这么多,作个总结吧...
算法目前常见有: 加密算法,散列算法,Base64(编码算法),https(SSL使用40位关键字作为RC4流加密算法)
加密技术通常分为两大类:"对称式"和"非对称式"。
对称加密主要有:AES、DES、3DES(可逆的,同一对密钥加解密,优点在于速度快,但不够安全)
非对称加密主要有:RSA、DSA、ECC(可逆的,公私钥对应,相对安全,但比较慢)
散列算法(签名算法)主要有: MD5、SHA1、HMAC (这个主要用于验证,散列算法不可逆)