Javascript 和 我之前发的 python加密
以及 go加密
解密不一样 不需要导那么多的库
只需要安装几个库 其中需要了解最多的 crypto-js
具体就不多介绍了直接上官网
https://www.npmjs.com/package/crypto-js
安装
| npm install crypto-js --save-dev |
| npm install md5 --save-dev |
一些常见的built-in 函数加密
unescape
unescape() 函数可对通过 escape() 编码的字符串进行解码。
| let e = escape("始識") |
| console.log(e) |
| let u = unescape(e) |
| console.log(u) |
URL编码与解码
| let e = encodeURI("https://始識的博客") |
| console.log(e) |
| let u = decodeURI(e) |
| console.log(u) |
fromCharCode
将 Unicode 编码转为一个字符
| var n = String.fromCharCode(65); |
| |
| |
| |
| [101,118,97,108].map(item=>{ |
| return String.fromCharCode(item) |
| }) |
| ['e', 'v', 'a', 'l'] |
Base64
btoa atob
| let e = btoa("https://www.cnblogs.com/zichliang/p/17265960.html") |
| console.log(e) |
| let u = atob(e) |
| console.log(u) |
引用 crypto-js 加密模块
点击展开
| var CryptoJS = require('crypto-js') |
| |
| function base64Encode() { |
| var srcs = CryptoJS.enc.Utf8.parse(text); |
| var encodeData = CryptoJS.enc.Base64.stringify(srcs); |
| return encodeData |
| } |
| |
| function base64Decode() { |
| var srcs = CryptoJS.enc.Base64.parse(encodeData); |
| var decodeData = srcs.toString(CryptoJS.enc.Utf8); |
| return decodeData |
| } |
| |
| var text = "https://www.cnblogs.com/zichliang/p/17265960.html" |
| |
| var encodeData = base64Encode() |
| var decodeData = base64Decode() |
| |
| console.log("Base64 编码: ", encodeData) |
| console.log("Base64 解码: ", decodeData) |
| |
| |
| |
| |
MD5
| |
| var CryptoJS = require('crypto-js') |
| |
| function MD5Test() { |
| var text = "https://www.cnblogs.com/zichliang" |
| return CryptoJS.MD5(text).toString() |
| } |
| |
| console.log(MD5Test()) |
PBKDF2
| |
| var CryptoJS = require('crypto-js') |
| |
| function pbkdf2Encrypt() { |
| var text = "https://www.cnblogs.com/zichliang" |
| var salt = "1234567" |
| |
| var encryptedData = CryptoJS.PBKDF2(text, salt, {keySize: 128/32,iterations: 10}); |
| return encryptedData.toString() |
| } |
| |
| console.log(pbkdf2Encrypt()) |
SHA1
| |
| var CryptoJS = require('crypto-js') |
| |
| function SHA1Encrypt() { |
| var text = "https://www.cnblogs.com/zichliang" |
| return CryptoJS.SHA1(text).toString(); |
| } |
| |
| console.log(SHA1Encrypt()) |
HMAC
| |
| var CryptoJS = require('crypto-js') |
| |
| function HMACEncrypt() { |
| var text = "https://www.cnblogs.com/zichliang" |
| var key = "secret" |
| return CryptoJS.HmacMD5(text, key).toString(); |
| } |
| |
| console.log(HMACEncrypt()) |
DES
点击展开
| |
| var CryptoJS = require('crypto-js') |
| |
| function desEncrypt() { |
| var key = CryptoJS.enc.Utf8.parse(desKey), |
| iv = CryptoJS.enc.Utf8.parse(desIv), |
| srcs = CryptoJS.enc.Utf8.parse(text), |
| |
| encrypted = CryptoJS.DES.encrypt(srcs, key, { |
| iv: iv, |
| mode: CryptoJS.mode.CBC, |
| padding: CryptoJS.pad.Pkcs7 |
| }); |
| return encrypted.toString(); |
| } |
| |
| function desDecrypt() { |
| var key = CryptoJS.enc.Utf8.parse(desKey), |
| iv = CryptoJS.enc.Utf8.parse(desIv), |
| srcs = encryptedData, |
| |
| decrypted = CryptoJS.DES.decrypt(srcs, key, { |
| iv: iv, |
| mode: CryptoJS.mode.CBC, |
| padding: CryptoJS.pad.Pkcs7 |
| }); |
| return decrypted.toString(CryptoJS.enc.Utf8); |
| } |
| |
| var text = "https://www.cnblogs.com/zichliang" |
| var desKey = "0123456789ABCDEF" |
| var desIv = "0123456789ABCDEF" |
| |
| var encryptedData = desEncrypt() |
| var decryptedData = desDecrypt() |
| |
| console.log("加密字符串: ", encryptedData) |
| console.log("解密字符串: ", decryptedData) |
| |
| |
| |
| |
3DES
点击展开
| |
| var CryptoJS = require('crypto-js') |
| |
| function tripleDesEncrypt() { |
| var key = CryptoJS.enc.Utf8.parse(desKey), |
| iv = CryptoJS.enc.Utf8.parse(desIv), |
| srcs = CryptoJS.enc.Utf8.parse(text), |
| |
| encrypted = CryptoJS.TripleDES.encrypt(srcs, key, { |
| iv: iv, |
| mode: CryptoJS.mode.ECB, |
| padding: CryptoJS.pad.Iso10126 |
| }); |
| return encrypted.toString(); |
| } |
| |
| function tripleDesDecrypt() { |
| var key = CryptoJS.enc.Utf8.parse(desKey), |
| iv = CryptoJS.enc.Utf8.parse(desIv), |
| srcs = encryptedData, |
| |
| decrypted = CryptoJS.TripleDES.decrypt(srcs, key, { |
| iv: iv, |
| mode: CryptoJS.mode.ECB, |
| padding: CryptoJS.pad.Iso10126 |
| }); |
| return decrypted.toString(CryptoJS.enc.Utf8); |
| } |
| |
| var text = "https://www.cnblogs.com/zichliang" |
| var desKey = "0123456789ABCDEF" |
| var desIv = "0123456789ABCDEF" |
| |
| var encryptedData = tripleDesEncrypt() |
| var decryptedData = tripleDesDecrypt() |
| |
| console.log("加密字符串: ", encryptedData) |
| console.log("解密字符串: ", decryptedData) |
| |
| |
| |
| |
AES
点击展开
| |
| var CryptoJS = require('crypto-js') |
| |
| function aesEncrypt() { |
| var key = CryptoJS.enc.Utf8.parse(aesKey), |
| iv = CryptoJS.enc.Utf8.parse(aesIv), |
| srcs = CryptoJS.enc.Utf8.parse(text), |
| |
| encrypted = CryptoJS.AES.encrypt(srcs, key, { |
| iv: iv, |
| mode: CryptoJS.mode.CBC, |
| padding: CryptoJS.pad.Pkcs7 |
| }); |
| return encrypted.toString(); |
| } |
| |
| function aesDecrypt() { |
| var key = CryptoJS.enc.Utf8.parse(aesKey), |
| iv = CryptoJS.enc.Utf8.parse(aesIv), |
| srcs = encryptedData, |
| |
| decrypted = CryptoJS.AES.decrypt(srcs, key, { |
| iv: iv, |
| mode: CryptoJS.mode.CBC, |
| padding: CryptoJS.pad.Pkcs7 |
| }); |
| return decrypted.toString(CryptoJS.enc.Utf8); |
| } |
| |
| var text = "https://www.cnblogs.com/zichliang" |
| var aesKey = "0123456789ABCDEF" |
| var aesIv = "0123456789ABCDEF" |
| |
| var encryptedData = aesEncrypt() |
| var decryptedData = aesDecrypt() |
| |
| console.log("加密字符串: ", encryptedData) |
| console.log("解密字符串: ", decryptedData) |
| |
| |
| |
RC4
点击展开
| |
| var CryptoJS = require('crypto-js') |
| |
| function RC4Encrypt() { |
| return CryptoJS.RC4.encrypt(text, key).toString(); |
| } |
| |
| function RC4Decrypt(){ |
| return CryptoJS.RC4.decrypt(encryptedData, key).toString(CryptoJS.enc.Utf8); |
| } |
| |
| var text = "https://www.cnblogs.com/zichliang" |
| var key = "12345678ASDFG" |
| |
| var encryptedData = RC4Encrypt() |
| var decryptedData = RC4Decrypt() |
| |
| console.log("加密字符串: ", encryptedData) |
| console.log("解密字符串: ", decryptedData) |
| |
| |
| |
Rabbit
点击展开
| |
| var CryptoJS = require('crypto-js') |
| |
| function rabbitEncrypt() { |
| return CryptoJS.Rabbit.encrypt(text, key).toString(); |
| } |
| |
| function rabbitDecrypt() { |
| return CryptoJS.Rabbit.decrypt(encryptedData, key).toString(CryptoJS.enc.Utf8); |
| } |
| |
| var text = "https://www.cnblogs.com/zichliang/p/16653303.html" |
| var key = "1234567ASDFG" |
| |
| var encryptedData = rabbitEncrypt() |
| var decryptedData = rabbitDecrypt() |
| |
| console.log("加密字符串: ", encryptedData) |
| console.log("解密字符串: ", decryptedData) |
| |
| |
| |
RSA
使用 node-rsa
需要安装一个库
npm install node-rsa
点击展开
| |
| var NodeRSA = require('node-rsa'); |
| |
| function rsaEncrypt() { |
| pubKey = new NodeRSA(publicKey,'pkcs8-public'); |
| var encryptedData = pubKey.encrypt(text, 'base64'); |
| return encryptedData |
| } |
| |
| function rsaDecrypt() { |
| priKey = new NodeRSA(privatekey,'pkcs8-private'); |
| var decryptedData = priKey.decrypt(encryptedData, 'utf8'); |
| return decryptedData |
| } |
| |
| var key = new NodeRSA({b: 512}); |
| var publicKey = key.exportKey('pkcs8-public'); |
| var privatekey = key.exportKey('pkcs8-private'); |
| var text = "https://www.cnblogs.com/zichliang/p/16653303.html" |
| |
| var encryptedData = rsaEncrypt() |
| var decryptedData = rsaDecrypt() |
| |
| console.log("公钥:\n", publicKey) |
| console.log("私钥:\n", privatekey) |
| console.log("加密字符串: ", encryptedData) |
| console.log("解密字符串: ", decryptedData) |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
使用自带模块crypto:
| const crypto = require('crypto'); |
| const nodeRSA = require('node-rsa'); |
| |
| |
| const key = new nodeRSA({b: 1024}); |
| |
| const publicKey = key.exportKey('public'); |
| |
| const privateKey = key.exportKey('private'); |
| |
| const secret = 'https://www.cnblogs.com/zichliang/p/16653303.html' |
| |
| const encrypt = crypto.privateEncrypt(privateKey, Buffer.from(secret)); |
| const decrypt = crypto.publicDecrypt(publicKey, encrypt); |
| |
| console.log('加密后:', encrypt.toString('base64')); |
| console.log('解密后:', decrypt.toString()); |
RSA 长加密
这个加密是真的麻烦 ,而且还需要导入jsencrypt.min.js
这里贴上 GitHub地址 https://github.com/wangqinglongDo/github_demo/blob/master/libs/jsencrypt.min.js
对了 还需要补环境 而且解密也不是很好用,如果有大佬知道如何解密的 希望在评论区告诉我
点击展开
| var encrypt = new JSEncrypt(); |
| var publickKey = "-----BEGIN PUBLIC KEY-----\ |
| MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLFb8qp1vRFvi/qfgi1Wg7Mi8l\ |
| LcpfAc+tgpyD7aFW9QquQVMm/jG1IJZVQ6LsdkI7TiDutMCzOMCBXbdSC9BCIAGA\ |
| L2Sz3cYVlGb1kYSM0ZMcUMIK5eF4Bptke070XHvbi8wArtysJ0l71RHDd786tNbG\ |
| W0hDSw3zAqTErbxFaQIDAQAB\ |
| -----END PUBLIC KEY-----\ |
| " |
| encrypt.setPublicKey(publickKey); |
| var data = "https://www.cnblogs.com/zichliang/p/17265960.html"; |
| var commonEncodeData = encrypt.encryptLong(data); |
| |
| console.log(commonEncodeData) |
| |
| var cnEscapeData = window.btoa(window.encodeURIComponent(data)); |
| var encryptData = encrypt.encryptLong(cnEscapeData); |
| console.log(encryptData) |