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

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


Phương thức crypto.generateKeyPairSync() được dùng để tạo một cặp khóa bất đối xứng mới theo kiểu được chỉ định trong luồng đồng bộ (sync). Các kiểu được hỗ trợ để tạo cặp khóa bao gồm: 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ả của nó khi publicKeyEncoding hoặc privateKeyEncoding được chỉ định, ngược lại phần tương ứng của keyObject sẽ được trả về. Kiểu được khuyến nghị cho khóa công khai là 'spki' và cho khóa riêng tư là 'pkcs8'.

Cú pháp

crypto.generateKeyPairSync(type, options)

Tham số

Các tham số trên đượ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 kiểu RSA, DSA.

    • publicExponent – Giá trị mũ công khai cho thuật toán RSA. Giá trị mặc định: 0x10001.

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

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

    • prime – Tham số prime cho các kiểu như 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 thuật toán DH.

    • publicKeyEncoding – Giá trị chuỗi cho mã hóa khóa công khai.

    • privateKeyEncoding – Giá trị chuỗi cho mã hóa khóa riêng tư.

Ví dụ

Tạo file tên generateKeyPairSync.js và sao chép đoạn mã dưới đây. Sau khi tạo file, chạy lệnh sau:

node generateKeyPairSync.js

generateKeyPairSync.js

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

// Lấy giá trị publicKey và privateKey trong quy trình đồng bộ
const { publicKey, privateKey } = generateKeyPairSync('ec', {
    namedCurve: 'secp256k1', // Triển khai options
    publicKeyEncoding: {
        type: 'spki',
        format: 'der'
    },
    privateKeyEncoding: {
        type: 'pkcs8',
        format: 'der'
    }
});

// In cặp khóa bất đối xứng trong quy trình đồng bộ
console.log("Khóa công khai là: ", publicKey);
console.log();
console.log("Khóa riêng tư là: ", privateKey);

Kết quả

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

Ví dụ 2

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

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

// Lấy giá trị publicKey và privateKey trong quy trình đồng bộ
const { publicKey, privateKey } = generateKeyPairSync('dsa', {
    modulusLength: 570, // Triển khai options
    publicKeyEncoding: {
        type: 'spki',
        format: 'der'
    },
    privateKeyEncoding: {
        type: 'pkcs8',
        format: 'der'
    }
});

// In cặp khóa bất đối xứng sau khi mã hóa
console.log("Khóa công khai là: ", publicKey)
console.log("Giá trị khóa công khai ở base64: ", publicKey.toString('base64'));
console.log("------------------------------------------------------")
console.log("Khóa riêng tư là: ", privateKey)
console.log("Khóa riêng tư ở base64: ", privateKey.toString('base64'));

Kết quả

C:\home\node>> node generateKeyPairSync.js
Khóa công khai là: 
Giá trị khóa công khai ở base64: MIIBDzCBvwYHKoZIzjgEATCBswJJAJpc3aPODo4+Du0RlhP+HKb2NScMYPlR7t0sdRJhr0JWPvtRyF Wmn5ZAldFdDrUye5eQ+HmwgJboEWtCUm3b24CoLSQ74P1YkwIdAJs5rCSAIefaTT469xx+/8C3jS4W jYpHci0rft8CR3Fx1wxDFdCHJBqPlR7iGxd+7nZlChABL7UqCZMaiwCJ2ijVXc5dgr3Frudu7CbaAn RJStbqDjm5ppj4aaZV/9FmKvWVao9wA0sAAkhQtXOIWQrHde+fXoZLgPhbTBctPB1tcFztNmq2s3IO KGfo2kFUL6eJu811SSZ1scQFLVKc5DrZIdW7t3UqzEH+xCVxNkWtGQk=
------------------------------------------------------
Khóa riêng tư là: 
Khóa riêng tư ở base64: MIHlAgEAMIG/BgcqhkjOOAQBMIGzAkkAmlzdo84Ojj4O7RGWE/4cpvY1Jwxg+VHu3Sx1EmGvQlY++1 HIVaaflkCV0V0OtTJ7l5D4ebCAlugRa0JSbdvbgKgtJDvg/ViTAh0AmzmsJIAh59pNPjr3HH7/wLeN LhaNikdyLSt+3wJHcXHXDEMV0IckGo+VHuIbF37udmUKEAEvtSoJkxqLAInaKNVdzl2CvcWu527sJt oCdElK1uoOObmmmPhpplX/0WYq9ZVqj3AEHgIcJ2ON17GGE4FrtkJak337GB+bAEkb+YjulN2rug==