Object 內建對象

物件Cipher

對稱加密演算法對象

Cipher 物件屬於crypto模組,創建:

1
var c = new crypto.Cipher(crypto.AES, crypto.ECB, ...);

以下以AES 為例,示範如何使用Cipher 物件進行加密與解密:

首先,我們需要取得一個對稱加密的Cipher 對象,如AES 加密演算法:

1 2 3
const 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 3
const 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 3
const 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 2
new Cipher(Integer provider, Buffer key);

呼叫參數:

  • provider: Integer, 指定加密演算法
  • key:Buffer, 指定加密解密密碼

Cipher 建構函數

1 2 3
new Cipher(Integer provider, Integer mode, Buffer key);

呼叫參數:

  • provider: Integer, 指定加密演算法
  • mode: Integer, 指定分組密碼工作模式
  • key:Buffer, 指定加密解密密碼

Cipher 建構函數

1 2 3 4
new Cipher(Integer provider, Integer mode, Buffer key, Buffer iv);

呼叫參數:

  • provider: Integer, 指定加密演算法
  • mode: Integer, 指定分組密碼工作模式
  • key:Buffer, 指定加密解密密碼
  • iv:Buffer, 指定初始向量

成員屬性

name

String, 傳回目前演算法名稱

1
readonly String Cipher.name;

keySize

Integer, 傳回目前演算法密碼長度,以位元為單位

1
readonly Integer Cipher.keySize;

ivSize

Integer, 傳回目前演算法初始向量長度,以位元組為單位

1
readonly Integer Cipher.ivSize;

blockSize

Integer, 傳回目前演算法資料區塊長度,以位元組為單位

1
readonly Integer Cipher.blockSize;

成員函數

paddingMode

使用填滿模式

1
Cipher.paddingMode(Integer mode);

呼叫參數:

  • mode: Integer, 指定填充模式,預設為PADDING_PKCS7

encrypt

使用當前演算法密碼加密數據

1
Buffer Cipher.encrypt(Buffer data) async;

呼叫參數:

  • data:Buffer, 指定要加密的數據

回傳結果:

  • Buffer, 返回加密後的數據

decrypt

使用目前演算法密碼解密數據

1
Buffer Cipher.decrypt(Buffer data) async;

呼叫參數:

  • data:Buffer, 指定要解密的數據

回傳結果:

  • Buffer, 返回解密後的數據

toString

傳回物件的字串表示,一般回傳"[Native Object]",物件可以根據自己的特性重新實現

1
String Cipher.toString();

回傳結果:

  • String, 傳回物件的字串表示

toJSON

傳回物件的JSON 格式表示,一般傳回物件定義的可讀屬性集合

1
Value Cipher.toJSON(String key = "");

呼叫參數:

  • key: String, 未使用

回傳結果:

  • Value, 傳回包含可JSON 序列化的值