今天在工作時找到了關於 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