1月 10, 2020 NodeJS
今天在工作時找到了關於 NodeJS DES-ECB 的例子代碼,在這裏先記錄下來。

### NodeJS 中的 DES 加解密

Node.js 自帶強大的加密功能 Crypto,它是基於 OpenSSL 庫實現的加密技術。
DES 是一種對稱加密算法,密匙長度必須是 8 的整數倍,在一些簡單的應用場景經常被使用。

為了網絡上信息傳輸的安全(防止第三方竊取信息看到明文),發送發和接收方分別進行加密和解密,這樣信息在網絡上傳輸的時候就是相對安全的。

DES 加密模式有: Electronic Codebook (ECB) , Cipher Block Chaining (CBC) , Cipher Feedback (CFB) , Output Feedback (OFB)。這裏以密文分組鏈接模式 CBC 為例,使用了相同的 key 和 iv (Initialization Vector)。

```js
const crypto = require('crypto')

// DES 加密
function desEncrypt (message, key) {
	key = key.length >= 8 ? key.slice(0, 8) : key.concat('0'.repeat(8 - key.length));
	const keyHex = new Buffer(key);
	const cipher = crypto.createCipheriv('des-cbc', keyHex, keyHex);
	let c = cipher.update(message, 'utf8', 'base64');
	c += cipher.final('base64');
	return c;
}

// DES 解密
function desDecrypt (text, key) {
	key = key.length >= 8 ? key.slice(0, 8) : key.concat('0'.repeat(8 - key.length));
	const keyHex = new Buffer(key);
	const cipher = crypto.createDecipheriv('des-cbc', keyHex, keyHex);
	let c = cipher.update(text, 'base64', 'utf8');
	c += cipher.final('utf8');
	return c;
}
```

### NodeJS DES-ECB

上面的代碼情況是使用 DES-CBC 的,如果是要改為使用 DES-ECB 的話,則要把 `keyHex` 換為 `null` 值。

還要注意讀入的字串是什麼格式,即是 `base64` > `utf8` 等等,不然搞半天也隻會搞出亂碼來。

以下代碼是已經把上面的改為使用 DES-ECB Algorithm :

```js
// import
const crypto = require('crypto');

// DES-CBC Encrypt
function desEncrypt (text, key) {
	key = key.length >= 8 ? key.slice(0, 8) : key.concat('0'.repeat(8 - key.length));
	const keyHex = new Buffer(key);
	const cipher = crypto.createCipheriv('des-ecb', keyHex, null);
	let c = cipher.update(text, 'utf8', 'base64');
	c += cipher.final('base64');
	return c;
}

// DES-CBC Decrypt
function desDecrypt (text, key) {
	key = key.length >= 8 ? key.slice(0, 8) : key.concat('0'.repeat(8 - key.length));
	const keyHex = new Buffer(key);
	const cipher = crypto.createDecipheriv('des-ecb', keyHex, null);
	let c = cipher.update(text, 'base64', 'utf8');
	c += cipher.final('utf8');
	return c;
}
```

這段 Code 省掉了 19 筆者半日時間。

> 參考網址 : https://blog.niceue.com/front-end-development/des-encryption-and-decryption-in-nodejs.html
過去文章
2025 (9)
4 (5)
3 (1)
2 (3)
2024 (25)
11 (3)
10 (3)
9 (1)
3 (18)
2022 (6)
10 (1)
6 (2)
5 (1)
3 (1)
1 (1)
2021 (21)
11 (7)
7 (1)
6 (2)
5 (2)
4 (6)
3 (2)
2 (1)
2020 (92)
12 (1)
11 (2)
10 (4)
9 (10)
8 (5)
7 (1)
6 (3)
5 (1)
4 (4)
3 (25)
2 (7)
1 (29)
2019 (57)
12 (25)
11 (7)
9 (25)