NodeJS - crypto.subtle Property


The NodeJs Crypto.subtle is an instance and read-only property of the crypto interface. It is used to retrieve the subtle crypto which can be used to perform low-level cryptographic operations.

The SubtleCrypto is an interface in the NodeJs that provides several low-level cryptographic functions.

Cryptography operations are basic procedures used to protect information by transforming it into an unrecognizable form to somebody who cannot access it.

These operations include data encryption, data integrity, identity verification, information authentication, and non-repudiation.

Syntax

Following is the syntax of the NodeJs Crypto.subtle property −

Crypto.subtle

Parameters

  • As it is property does not accept any parameter.

Return value

This property returns the SubtleCrypto interface.

Example 1

The following is the basic example of the NodeJs Crypto.subtle property.

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));

Output

The above program produces the following output −

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

Example 2

The following is another example of the NodeJs Crypto.subtle property. We use this property to retrieve the CryptoSubtle to perform low-level cryptographic operations such as data encryption and decryption.

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); })();

Output

After executing the above program it will display the following output −

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
Advertisements