เมธอด crypto.generateKeyPairSync() ใช้สำหรับสร้างคู่กุญแจแบบไม่สมมาตร (asymmetric key pair) ของประเภทที่ระบุในโหมดซิงโครนัส (synchronous) ประเภทที่รองรับสำหรับการสร้างคู่กุญแจ ได้แก่ RSA, DSA, EC, Ed25519, Ed448, X25519, X448 และ DH ฟังก์ชันนี้จะทำงานเหมือนกับการเรียก keyObject.export บนผลลัพธ์เมื่อระบุ publicKeyEncoding หรือ privateKeyEncoding มิฉะนั้นจะคืนค่าส่วนที่เกี่ยวข้องของ keyObject โดยตรง ประเภทที่แนะนำสำหรับกุญแจสาธารณะคือ 'spki' และสำหรับกุญแจส่วนตัวคือ 'pkcs8'
ไวยากรณ์
crypto.generateKeyPairSync(type, options)
พารามิเตอร์
พารามิเตอร์ข้างต้นอธิบายดังนี้:
type – ระบุประเภทสตริงที่ต้องการสร้างกุญแจ ประเภทที่รองรับคือ RSA, DSA, EC, Ed25519, Ed448, X25519, X448 และ DH
options – สามารถระบุพารามิเตอร์ต่อไปนี้ได้:
modulusLength – ขนาดกุญแจในบิตสำหรับประเภท RSA และ DSA
publicExponent – ค่าตัวยกกำลังสาธารณะสำหรับอัลกอริทึม RSA ค่าเริ่มต้นคือ
0x10001divisorLength – ขนาดของ q ในบิต
namedCurve – ชื่อของคอนกรวย (curve) ที่จะใช้
prime – พารามิเตอร์เฉพาะสำหรับประเภทเช่น DH
primeLength – ความยาวเฉพาะในบิต
generator – ค่าเจเนอเรเตอร์ที่กำหนดเอง ค่าเริ่มต้นคือ
2groupName – ชื่อกลุ่ม Diffie-Hellman สำหรับอัลกอริทึม DH
publicKeyEncoding – ค่าสตริงสำหรับการเข้ารหัสกุญแจสาธารณะ
privateKeyEncoding – ค่าสตริงสำหรับการเข้ารหัสกุญแจส่วนตัว
ตัวอย่าง
สร้างไฟล์ชื่อ generateKeyPairSync.js และคัดลอกโค้ดด้านล่าง หลังจากสร้างไฟล์แล้ว ใช้คำสั่งต่อไปนี้เพื่อรันโค้ด:
node generateKeyPairSync.js
generateKeyPairSync.js
// โปรแกรม Node.js สาธิตการทำงานของเมธอด crypto.generateKeyPairSync()
// นำเข้า generateKeyPairSync จากโมดูล crypto
const { generateKeyPairSync } = require('crypto');
// สร้างคู่กุญแจแบบไม่สมมาตรในโหมดซิงโครนัส
const { publicKey, privateKey } = generateKeyPairSync('ec', {
namedCurve: 'secp256k1', // กำหนดตัวเลือก
publicKeyEncoding: {
type: 'spki',
format: 'der'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'der'
}
});
// แสดงคู่กุญแจแบบไม่สมมาตร
console.log("The public key is: ", publicKey);
console.log();
console.log("The private key is: ", privateKey);
ผลลัพธ์
C:\home\node>> node generateKeyPairSync.js The public key is: <Buffer 30 56 30 10 06 07 2a 86 48 ce 3d 02 01 06 05 2b 81 04 00 0a 03 42 00 04 a1 76 dd f0 fe 96 cc 28 59 a5 45 16 58 86 ca 3b 56 1e 04 ee b0 de 28 67 0a 70 ... > The private key is: <Buffer 30 81 84 02 01 00 30 10 06 07 2a 86 48 ce 3d 02 01 06 05 2b 81 04 00 0a 04 6d 30 6b 02 01 01 04 20 e6 f0 69 2e b0 35 7d 0b 5c ba 76 fc dc 9f 95 ae d7 ... >
ตัวอย่างเพิ่มเติม
ลองดูตัวอย่างอีกหนึ่งกรณี:
// โปรแกรม Node.js สาธิตการทำงานของเมธอด crypto.generateKeyPairSync()
// นำเข้า generateKeyPairSync จากโมดูล crypto
const { generateKeyPairSync } = require('crypto');
// สร้างคู่กุญแจแบบไม่สมมาตรในโหมดซิงโครนัส
const { publicKey, privateKey } = generateKeyPairSync('dsa', {
modulusLength: 570, // กำหนดตัวเลือก
publicKeyEncoding: {
type: 'spki',
format: 'der'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'der'
}
});
// แสดงคู่กุญแจหลังเข้ารหัส
console.log("Public Key is: ", publicKey)
console.log("The public key value in base64 is: ", publicKey.toString('base64'));
console.log("------------------------------------------------------")
console.log("Private Key is: ", privateKey)
console.log("The private key in base64 is: ", privateKey.toString('base64'));
ผลลัพธ์
C:\home\node>> node generateKeyPairSync.js Public Key is: <Buffer 30 82 01 0f 30 81 bf 06 07 2a 86 48 ce 38 04 01 30 81 b3 02 49 00 9a 5c dd a3 ce 0e 8e 3e 0e ed 11 96 13 fe 1c a6 f6 35 27 0c 60 f9 51 ee dd 2c 75 12 ... > The public key value in base64 is: MIIBDzCBvwYHKoZIzjgEATCBswJJAJpc3aPODo4+Du0RlhP+HKb2NScMYPlR7t0sdRJhr0JWPvtRyF Wmn5ZAldFdDrUye5eQ+HmwgJboEWtCUm3b24CoLSQ74P1YkwIdAJs5rCSAIefaTT469xx+/8C3jS4W jYpHci0rft8CR3Fx1wxDFdCHJBqPlR7iGxd+7nZlChABL7UqCZMaiwCJ2ijVXc5dgr3Frudu7CbaAn RJStbqDjm5ppj4aaZV/9FmKvWVao9wA0sAAkhQtXOIWQrHde+fXoZLgPhbTBctPB1tcFztNmq2s3IO KGfo2kFUL6eJu811SSZ1scQFLVKc5DrZIdW7t3UqzEH+xCVxNkWtGQk= ------------------------------------------------------ Private Key is: <Buffer 30 81 e5 02 01 00 30 81 bf 06 07 2a 86 48 ce 38 04 01 30 81 b3 02 49 00 9a 5c dd a3 ce 0e 8e 3e 0e ed 11 96 13 fe 1c a6 f6 35 27 0c 60 f9 51 ee dd 2c ... > The private key in base64 is: MIHlAgEAMIG/BgcqhkjOOAQBMIGzAkkAmlzdo84Ojj4O7RGWE/4cpvY1Jwxg+VHu3Sx1EmGvQlY++1 HIVaaflkCV0V0OtTJ7l5D4ebCAlugRa0JSbdvbgKgtJDvg/ViTAh0AmzmsJIAh59pNPjr3HH7/wLeN LhaNikdyLSt+3wJHcXHXDEMV0IckGo+VHuIbF37udmUKEAEvtSoJkxqLAInaKNVdzl2CvcWu527sJt oCdElK1uoOObmmmPhpplX/0WYq9ZVqj3AEHgIcJ2ON17GGE4FrtkJak337GB+bAEkb+YjulN2rug==