为破解前端加密作准备,先了解一些常见的加密算法css
DES 算法把 64 位(8 字节)的明文输入块变为 64 位的密文输出块(分组加密),它所使用的密钥也是 64 位(不足 64 位会自动补齐)
弊端:只能加密最大 64 位数据前端
关键参数:密钥 key
JS 实现:git
<script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js"></script> <script> //DES 加密 function encryptByDES(message, key){ var keyHex = CryptoJS.enc.Utf8.parse(key); var encrypted = CryptoJS.DES.encrypt(message, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString(); } //DES 解密 function decryptByDES(ciphertext, key){ var keyHex = CryptoJS.enc.Utf8.parse(key); var decrypted = CryptoJS.DES.decrypt({ ciphertext: CryptoJS.enc.Hex.parse(ciphertext) }, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); var result_value = decrypted.toString(CryptoJS.enc.Utf8); return result_value; } </script> //调用 <script> var message = '111111';//须要加密的数据 var key = '12345678';//加密密钥 key var desMessage = 'xxxxxxxxxx'; //加密 desMessage = encryptByDES(message, key); console.log(desMessage); //解密 message = decryptByDES(desMessage,key) console.log(message); </script>
能够看到,加解密时最重要的一个东西即是密钥 keygithub
DES 的升级替代品,AES 为分组密码,分组密码也就是把明文分红一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。
在 AES 标准规范中,分组长度只能是 128 位,也就是说,每一个分组为 16 个字节(每一个字节 8 位)。密钥的长度能够使用 128 位、192 位或 256 位。密钥的长度不一样,推荐加密轮数也不一样算法
关键参数:密钥 key,偏移量 iv
JS 实现:加密
//首先要引入 https://github.com/sytelus/CryptoJS 中的两个文件 <script src="./rollups/aes.js"></script> <script src="./components/pad-zeropadding.js"></script>//这个文件不是固定的,须要根据不一样的填充方式而更改 <script> function encryptByAES(data, key, iv){ var key = CryptoJS.enc.Latin1.parse(key); var iv = CryptoJS.enc.Latin1.parse(iv); var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding}); return encrypted.ciphertext.toString(); } function decryptByAES(data, key, iv){ var key = CryptoJS.enc.Latin1.parse(key); var iv = CryptoJS.enc.Latin1.parse(iv); var decrypted = CryptoJS.AES.decrypt(data,key,{iv:iv,padding:CryptoJS.pad.ZeroPadding}); return decrypted.ciphertext.toString(); } </script>
RSA 公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,所以能够将乘积公开做为加密密钥
.net
关键参数:公钥 PUBLIC_KEY,私钥 PRIVATE_KEY
JS 实现:code
<script src="https://cdn.bootcss.com/jsencrypt/3.0.0-beta.1/jsencrypt.js"></script> <script> var PUBLIC_KEY = '公钥'; var PRIVATE_KEY = '私钥'; var message = 'xxxxxxx'; var encryptmsg = 'testtest'; //使用公钥加密 function encryptByRSA(data, pub_key){ var encrypt = new JSEncrypt(); encrypt.setPublicKey('-----BEGIN PUBLIC KEY-----' + pub_key + '-----END PUBLIC KEY-----'); var encrypted = encrypt.encrypt(data); return encrypted; } //使用私钥解密 function decryptByRSA(data, pri_key){ var decrypt = new JSEncrypt(); decrypt.setPrivateKey('-----BEGIN RSA PRIVATE KEY-----'+ pri_key +'-----END RSA PRIVATE KEY-----'); var decrypted = decrypt.decrypt(encrypted); return decrypted; } </script>