• Node.js Video Tutorials

NodeJS - crypto.subtle 屬性


NodeJs 的 Crypto.subtle 是 crypto 介面的一個例項且只讀屬性。它用於檢索可用於執行低階加密操作的 Subtle Crypto。

SubtleCrypto 是 NodeJs 中的一個介面,它提供了一些低階加密函式。

加密操作是用於保護資訊的常用基本過程,透過將其轉換為無法識別形式來保護資訊,使未經授權的人無法訪問。

這些操作包括資料加密、資料完整性、身份驗證、資訊認證和不可否認性。

語法

以下是 NodeJs Crypto.subtle 屬性的語法:

Crypto.subtle

引數

  • 由於它是一個屬性,因此不接受任何引數。

返回值

此屬性返回 SubtleCrypto 介面。

示例 1

以下是 NodeJs Crypto.subtle 屬性的基本示例。

const crypto = require('crypto').webcrypto;
const message = 'Hello, world!';
async function createHash(message) {
    const encoder = new TextEncoder();
    const data = encoder.encode(message);
    const hashBuffer = await crypto.subtle.digest('SHA-256', data);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return hashHex;
}
createHash(message).then(hash => console.log('SHA-256 hash of ', message, 'is: ', hash));

輸出

以上程式產生以下輸出:

SHA-256 hash of  Hello, world! is:  315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3

示例 2

以下是 NodeJs Crypto.subtle 屬性的另一個示例。我們使用此屬性檢索 CryptoSubtle 以執行低階加密操作,例如資料加密和解密。

const { webcrypto } = require('crypto');

async function generateKey() {
  return webcrypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']);
}

async function encryptData(data, key) {
  const iv = webcrypto.getRandomValues(new Uint8Array(12));
  const encryptedData = await webcrypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, new TextEncoder().encode(data));
  return { iv, encryptedData: new Uint8Array(encryptedData) };
}

async function decryptData(encryptedData, iv, key) {
  const decryptedDataBuffer = await webcrypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, encryptedData);
  return new TextDecoder().decode(decryptedDataBuffer);
}

(async () => {
  const key = await generateKey();
  const data = 'Tutorialspoint!';
  const { iv, encryptedData } = await encryptData(data, key);
  console.log('Encrypted Data:', encryptedData);
  const decryptedData = await decryptData(encryptedData, iv, key);
  console.log('Decrypted Data:', decryptedData);
})();

輸出

執行以上程式後,將顯示以下輸出:

Encrypted Data: Uint8Array(31) [
  223, 193,  14, 42, 142, 251, 166,  92,
  192, 167, 135, 65, 143,  66,  41,  20,
   51, 227,  13, 10, 151,  81, 221, 140,
   41, 183, 157,  1, 181, 252, 251
]
Decrypted Data: Tutorialspoint!
nodejs_crypto.htm
廣告

© . All rights reserved.