前言:刚学h5没多久,感觉吧比android难多了啊,特别是适配,真尼玛苦逼啊,不过h5的大牛还是很多的,毕竟这么多年了,随便一搜就一大堆,正是因为这样,今天刚好后台需要用des对称加密传输数据,然后就上网一搜,真尼玛一大堆啊,最后找到了一个叫crypto-js的库,down下来的时候不会用,尼玛尴尬了,于是就当笔记记下来了,大牛勿喷~!
先附上官方git链接:
https://github.com/brix/crypto-js
看了官网的demo,然后发现了这么多库:
我尼玛只要des加密啊,于是找到这么一个文件:
然后照着官方demo敲了一下,发现中文加密解密出来是乱码,又尴尬了:
结果:
好吧,我已经知道我很水了/苦笑,最后捣腾了半天,终于是搞好了。
全部代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- CryptoJS -->
<script src="./core.js"></script>
<script src="./cipher-core.js"></script>
<script src="./tripledes.js"></script>
<script src="./mode-ecb.js"></script>
<script>
window.onload = function () {
//需要加密的内容
let str1 = encryptByDES('helloworld');
let str2 = decryptByDESModeEBC(str1);
console.log(str1.toString())
console.log(str2)
}
//加密的私钥
var key = '12345678';
// DES加密
function encryptByDES(message) {
//把私钥转换成16进制的字符串
var keyHex = CryptoJS.enc.Utf8.parse(key);
//模式为ECB padding为Pkcs7
var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
//加密出来是一个16进制的字符串
return encrypted.ciphertext.toString();
}
//DES ECB模式解密
function decryptByDESModeEBC(ciphertext) {
//把私钥转换成16进制的字符串
var keyHex = CryptoJS.enc.Utf8.parse(key);
//把需要解密的数据从16进制字符串转换成字符byte数组
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
//以utf-8的形式输出解密过后内容
var result_value = decrypted.toString(CryptoJS.enc.Utf8);
return result_value;
}
</script>