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