物件Cipher
對稱加密演算法對象
Cipher 物件屬於crypto模組,創建:
1var c = new crypto.Cipher(crypto.AES, crypto.ECB, ...);
以下以AES 為例,示範如何使用Cipher 物件進行加密與解密:
首先,我們需要取得一個對稱加密的Cipher 對象,如AES 加密演算法:
1
2
3const crypto = require('crypto');
const key = crypto.randomBytes(16); // generate a 16-byte random key
const cipher = new crypto.Cipher(crypto.AES, crypto.ECB, key);
在上述程式碼中,我們透過randomBytes
方法產生了16 個位元組的隨機數,作為AES 金鑰。然後,我們建立了一個AES 演算法的Cipher 對象,使用ECB 分組密碼工作模式,並使用產生的隨機數作為金鑰。
接下來,我們使用Cipher 物件的encrypt
方法對明文進行加密:
1
2
3const plaintext = 'Hello, world!';
const encrypted = cipher.encrypt(plaintext);
console.log(encrypted); // output encrypted data
在上述程式碼中,我們使用encrypt
方法對字串Hello, world!
進行加密,並輸出加密後的結果。
針對以上程式碼,需要注意以下幾點:
- 在進行加密之前,需要先建立一個對稱加密的Cipher 對象,並設定加密演算法、密碼和分組密碼工作模式等參數。
- 在呼叫加密方法後,我們可以得到加密後的數據,這通常是一個Buffer對象。需要注意,輸出的是二進位數據,需要使用相應的方式列印,例如使用
Hex
等方式進行轉換。
如果要解密該數據,我們同樣需要一個Cipher 對象,也是基於AES 演算法,且使用相同的key 和分組密碼工作模式:
1
2
3const decipher = new crypto.Cipher(crypto.AES, crypto.ECB, key);
const decrypted = decipher.decrypt(encrypted);
console.log(decrypted.toString()); // output decrypted data
在這裡,我們創建了一個新的Cipher 對象,使用相同的key 和密碼工作模式,並且使用decrypt
方法對加密資料進行解密。解密的結果是一個Buffer對象,需要轉換為字串才能被正確輸出。
繼承關係
建構函數
Cipher
Cipher 建構函數,僅用於ARC4 初始化
1
2new Cipher(Integer provider,
Buffer key);
呼叫參數:
- provider: Integer, 指定加密演算法
- key:Buffer, 指定加密解密密碼
Cipher 建構函數
1
2
3new Cipher(Integer provider,
Integer mode,
Buffer key);
呼叫參數:
- provider: Integer, 指定加密演算法
- mode: Integer, 指定分組密碼工作模式
- key:Buffer, 指定加密解密密碼
Cipher 建構函數
1
2
3
4new Cipher(Integer provider,
Integer mode,
Buffer key,
Buffer iv);
呼叫參數:
成員屬性
name
String, 傳回目前演算法名稱
1readonly String Cipher.name;
keySize
Integer, 傳回目前演算法密碼長度,以位元為單位
1readonly Integer Cipher.keySize;
ivSize
Integer, 傳回目前演算法初始向量長度,以位元組為單位
1readonly Integer Cipher.ivSize;
blockSize
Integer, 傳回目前演算法資料區塊長度,以位元組為單位
1readonly Integer Cipher.blockSize;
成員函數
paddingMode
使用填滿模式
1Cipher.paddingMode(Integer mode);
呼叫參數:
- mode: Integer, 指定填充模式,預設為PADDING_PKCS7
encrypt
使用當前演算法密碼加密數據
1Buffer Cipher.encrypt(Buffer data) async;
呼叫參數:
- data:Buffer, 指定要加密的數據
回傳結果:
- Buffer, 返回加密後的數據
decrypt
使用目前演算法密碼解密數據
1Buffer Cipher.decrypt(Buffer data) async;
呼叫參數:
- data:Buffer, 指定要解密的數據
回傳結果:
- Buffer, 返回解密後的數據
toString
傳回物件的字串表示,一般回傳"[Native Object]",物件可以根據自己的特性重新實現
1String Cipher.toString();
回傳結果:
- String, 傳回物件的字串表示
toJSON
傳回物件的JSON 格式表示,一般傳回物件定義的可讀屬性集合
1Value Cipher.toJSON(String key = "");
呼叫參數:
- key: String, 未使用
回傳結果:
- Value, 傳回包含可JSON 序列化的值