js 前端 AES 及 RSA 加解密

虽说在前端加密有点点画蛇添足的意味,但做了出来,也会觉得有一定的意义.......(省略很多感叹)

前端技术栈: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 (这个主要用于验证,散列算法不可逆)
 

展开阅读全文

没有更多推荐了,返回首页