前端js使用crypto-js进行des加密

背景交代

我使用的 react 进行开发,请求数据时,需要把一些常用参数放到 header 中传给服务端,但是由于以前老接口定义的规则,因此需要也这么干。 ###使用的加密库
我使用是cryptos-jshttps://github.com/brix/crypto-js

1
2
3
4
5
6
7
8
9
10
11
import CryptoJS from "crypto-js";

function encryptByDES(value, key) {
if (value == "") return "";
var keyHex = CryptoJS.enc.Utf8.parse(key);
var encrypted = CryptoJS.DES.encrypt(value, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
});
return encrypted.toString();
}

###转换成 16 进制字符串
上面的方法返回的是 base64 的字符串,如果需要 16 进制的字符串,则需要进行转换,由于官网写的太简单,也没找到参数配置来决定输出的字符串类型,因此我手动做了转换。
由于我们是 16 进制,因为这个浪费了三个小时的时间在调查这个。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function encryptByDES(value, key, isHex) {
if (value == "") return "";
var keyHex = CryptoJS.enc.Utf8.parse(key);
var encrypted = CryptoJS.DES.encrypt(value, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
});
const result = encrypted.toString();

if (isHex) {
// 把base64字符串转成crypto自定义的中间类型
var words = CryptoJS.enc.Base64.parse(result);
return CryptoJS.enc.Hex.stringify(words);
} else {
return result;
}
}

转换的灵感来自源码里面 docs/QuickStartGuide.wiki
但是在 github 上打开这个文件,和下载下来的源码里面的这个文件内容不一样,我是看的下载下来的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
var words = CryptoJS.enc.Base64.parse('SGVsbG8sIFdvcmxkIQ==');
var base64 = CryptoJS.enc.Base64.stringify(words);

var words = CryptoJS.enc.Latin1.parse('Hello, World!');
var latin1 = CryptoJS.enc.Latin1.stringify(words);

var words = CryptoJS.enc.Hex.parse('48656c6c6f2c20576f726c6421');
var hex = CryptoJS.enc.Hex.stringify(words);

var words = CryptoJS.enc.Utf8.parse('𤭢');
var utf8 = CryptoJS.enc.Utf8.stringify(words);

var words = CryptoJS.enc.Utf16.parse('Hello, World!');
var utf16 = CryptoJS.enc.Utf16.stringify(words);

var words = CryptoJS.enc.Utf16LE.parse('Hello, World!');
var utf16 = CryptoJS.enc.Utf16LE.stringify(words);
</script>

参看链接

文章作者: wenmu
文章链接: http://blog.wangpengpeng.site/2020/01/09/%E5%89%8D%E7%AB%AFjs%E4%BD%BF%E7%94%A8crypto-js%E8%BF%9B%E8%A1%8Cdes%E5%8A%A0%E5%AF%86/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 温木的博客
微信打赏