Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Phương thức crypto.generateKeyPair() trong Node.js


Phương thức crypto.generateKeyPair() được dùng để tạo một cặp khóa bất đối xứng mới theo kiểu được chỉ định. Các kiểu được hỗ trợ: RSA, DSA, EC, Ed25519, Ed448, X25519, X448 và DH. Hàm hoạt động như thể keyObject.export đã được gọi trên kết quả khi publicKeyEncoding hoặc privateKeyEncoding được chỉ định, ngược lại phần tương ứng của keyObject được trả về.

Cú pháp

crypto.generateKeyPair(type, options, callback)

Tham số

Các tham số được mô tả như sau:

  • type – Chuỗi kiểu khóa cần tạo. Các kiểu hỗ trợ: RSA, DSA, EC, Ed25519, Ed448, X25519, X448 và DH.

  • options – Có thể chứa các tham số sau:

    • modulusLength – Kích thước khóa tính bằng bit cho RSA, DSA.

    • publicExponent – Giá trị mũ công khai cho RSA. Mặc định: 0x10001.

    • divisorLength – Kích thước q tính bằng bit.

    • namedCurve – Tên đường cong sử dụng.

    • prime – Tham số prime cho DH.

    • primeLength – Độ dài prime tính bằng bit.

    • generator – Giá trị generator tùy chỉnh, mặc định: 2.

    • groupName – Tên nhóm Diffie-Hellman cho DH.

    • publicKeyEncoding – Mã hóa khóa công khai.

    • privateKeyEncoding – Mã hóa khóa riêng tư.

  • callback – Hàm callback có các tham số:

    • err – Loại lỗi (nếu có).

    • publicKey – Giá trị khóa công khai.

    • privateKey – Giá trị khóa riêng tư.

Ví dụ

Tạo file generateKeyPair.js và sao chép mã dưới. Chạy lệnh:

node generateKeyPair.js

generateKeyPair.js

// Chương trình Node.js minh họa luồng của crypto.generateKeyPair()
// Import generateKeyPair từ module crypto
const { generateKeyPair } = require('crypto');

// Gọi generateKeyPair() với các tham số dưới
generateKeyPair('rsa', {
    modulusLength: 530, // options
    publicExponent: 0x10101,
    publicKeyEncoding: {
        type: 'pkcs1',
        format: 'der'
    },
    privateKeyEncoding: {
        type: 'pkcs8',
        format: 'der',
        cipher: 'aes-192-cbc',
        passphrase: 'Welcome to TutorialsPoint!'
    }
}, (err, publicKey, privateKey) => { // Hàm callback
    if(!err) {
        // In cặp khóa bất đối xứng
        console.log("Khóa công khai là: ", publicKey);
        console.log();
        console.log("Khóa riêng tư là: ", privateKey);
    } else {
        // In lỗi nếu có
        console.log("Lỗi là: ", err);
    }
});

Kết quả

C:\home\node>> node generateKeyPair.js
Khóa công khai là: 
Khóa riêng tư là: 

Ví dụ 2

Xem thêm ví dụ khác.

// Chương trình Node.js minh họa luồng của crypto.generateKeyPair()
// Import generateKeyPair từ module crypto
const { generateKeyPair } = require('crypto');

// Gọi generateKeyPair() với các tham số dưới
generateKeyPair('ec', {
    namedCurve: 'secp256k1', // Options
    publicKeyEncoding: {
        type: 'spki',
        format: 'der'
    },
    privateKeyEncoding: {
        type: 'pkcs8',
        format: 'der'
    }
},(err, publicKey, privateKey) => { // Hàm callback
    if(!err) {
        // In cặp khóa bất đối xứng
        console.log("Khóa công khai là: ", publicKey);
        console.log("Khóa công khai ở hex là: ", publicKey.toString('hex'));
        console.log();
        console.log("Khóa riêng tư là: ", privateKey);
        console.log("Khóa riêng tư ở hex là: ", privateKey.toString('hex'));
    }else{
        // In lỗi nếu có
        console.log("Lỗi là: ", err);
    }
});

Kết quả

C:\home\node>> node generateKeyPair.js
Khóa công khai là: 
Khóa công khai ở hex là: 3056301006072a8648ce3d020106052b8104000a03420004d1d00b7ef7e33ecfd8082a20a85e52 beca562942c36b9fd3157cf98b03b41ecc4b4e13b4cd5cd35814383ee76afabaf794faf6f31bc8 c9f7007748f74767677c
Khóa riêng tư là: 
Khóa riêng tư ở hex là: 308184020100301006072a8648ce3d020106052b8104000a046d306b02010104200501a1d580f7 65566fa33a05d36dec82ad590ff8697d182ddca6b881acfbadd1a14403420004d1d00b7ef7e33e cfd8082a20a85e52beca562942c36b9fd3157cf98b03b41ecc4b4e13b4cd5cd35814383ee76afa baf794faf6f31bc8c9f7007748f74767677c