Node.js keyObject.type类

Node.js keyObject.type类

在 NodeJS 中,KeyObject 类代表特定算法的密钥,并包含用于处理加密密钥实例的内置函数或方法。

KeyObject.from(key): 这是一个内置于 KeyObject 类中的静态方法。用于从加密密钥或密钥对生成密钥对象。

语法: 将加密密钥实例转换为密钥对象形式的语法为:

keyObject.form( key )
  • 键(key): 对称或非对称密钥
  • keyObject.type: KeyObject的type方法指示生成的密钥是私有的、公共的还是私有的。对于对称密钥,keyObject.type返回secret,因为同一个密钥用于加密和解密。在使用非对称密钥时,加密和解密使用两个不同的密钥(公钥和私钥)。公钥对所有人都是可知的,但私钥保持私有,因此该方法对于私钥keyObject返回private类型,对于公钥keyObject返回public类型。

步骤1: 在终端中运行以下命令设置你的Node.js项目的package.json:

npm init

步骤2: 创建一个描述代码的app.js文件。

步骤3: 现在从NodeJS的crypto模块中导入所需的类或包。

步骤4: Subtle.generateKey()方法返回一个密码密钥(可以是对称密钥或非对称密钥对)。

语法: 以下是subtle.generateKey()方法的语法:

const key = generateKey(algorithm : Object , extractable : boolean , keyUsages : array);

参数:

  • Algorithm: 一个对象,指定了我们想要生成的密钥类型以及进一步的算法细节。
  • Extractable: 一个布尔变量,表示密钥是否可以被特定技术(如SubtleCrypto.exportKey())导出。如果为true,则密钥不可被导出。
  • Keyusages: 一个数组,列出使用创建的密钥所必须采取的步骤。

以下是可能的值:

索引 描述
1 ['sign'] 表示该密钥可用于生成数字签名。
2 ['verify'] 表示该密钥将用于验证数字签名。
3 ['encrypt'] 表示该密钥将用于加密通信。
4 ['decrypt'] 表示该密钥将用于解密通信。
5 ['deriveKey'] 表示该密钥将用于衍生密钥。
6 ['deriveBits'] 表示该密钥将用于衍生位数组。
7 ['wrapKey'] 表示可导出的密钥将以加密形式存储。
8 ['unwrapKey'] 表示可导出的密钥将以解密形式存储。

返回值: 一个包含结果值以及一些附加信息的对象。

步骤5: 使用 KeyObject.from(key) 方法并将生成的加密密钥值传递给该方法以生成keyObject。

示例1: 在这个示例中,我们将使用“AES-CBS”算法生成一个加密密钥,将这个加密密钥转换为keyObject,并检查这个keyObject的类型。

App.js

//Importing the crypto module
const {
    webcrypto: { subtle }, KeyObject
} = require('node:crypto');
 
// Generating the crypto key that is
// not a keyObject.
(async function () {
    const k = await subtle.generateKey({
        // algorithm name
        name: 'AES-CBC',
        // length of key in bits.
        length: 192,
    },
        // not exportable.
        false,
        // key can be used in encryption and decryption.
        ['encrypt', 'decrypt']);
 
    // Converting cryptographic key into keyObject.
    const key_obj = KeyObject.from(k);
 
    // printing the type of keyObject.
    console.log(key_obj.type)
 
})();

输出:

secret

示例2: 在这个示例中,我们将使用RSASSA-PKCS1-V1_5算法生成公钥和私钥的加密密钥对,并且针对每个加密密钥-公钥和私钥都运行keyObject.type方法。

//Importing the crypto module
const { Console } = require('node:console');
const {
    webcrypto: { subtle }, KeyObject
} = require('node:crypto');
 
 
// async function
(async function () {
 
    // generating the crypto key 
    // RSA Algorithm
    const k = await subtle.generateKey(
        {
            // Algorithm name.
            name: "RSASSA-PKCS1-v1_5",
            // Length of RSA modulus in bits (number of bits).       
            modulusLength: 4096,
            // Unit8Array -  consists of 8-bit unsigned integers.
            publicExponent: new Unit8Array([4, 5, 2]),
            // digital hash function
            hash: "SHA-256"
 
        }
        // Key is not exportable.
        , false,
        // Key can be used for generating and verifying 
        // the digital signature.
        ['sign', 'verify']
    );
 
 
    // Generating keyObject for private Key
    const private_key_object = KeyObject.from(k.privateKey);
 
    // printing the type of private KeyObject
    console.log(private_key_object.type);
 
    // Generating keyObject for public Key
    const public_key_object = KeyObject.from(k.publicKey);
 
    // printing the type of public KeyObject
    console.log(public_key_object.type);
 
})();

输出:

private
public

参考文献: https://nodejs.org/api/crypto.html#class-keyobject

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程