ecdh.getPublicKey() 方法是加密模塊中 ECDH 類的內置應用程序編程接口,用於設置橢圓曲線 Diffie-Hellman (ECDH) 對象的公鑰。可以使用 encoding 參數指定 key 的編碼。
通常不需要此方法,因為在應用程序中需要計算共享 key 時,可以使用 generateKeys() 和 setPrivateKey() 方法。如果公鑰對指定曲線無效,則會引發錯誤。
用法:
ecdh.setPublicKey( publicKey, encoding )
參數:此方法接受上麵提到和下麵描述的兩個參數:
- publicKey:這是需要設置的公鑰。它可以以字符串、ArrayBuffer、Buffer、TypedArray 或 DataView 的格式給出。
- encoding:這是一個字符串值,用於指定返回值的編碼。它是一個可選參數。
下麵的例子演示了這種方法:
範例1:
Javascript
const crypto = require('crypto');
// Generate an ECDH object for geekOne
const geekOne = crypto.createECDH('secp521r1');
// Generate a temporary ECDH object
// for generating a public key
const tmpECDH = crypto.createECDH('secp521r1');
// Get a temporary public key as a
// Buffer for demonstration
let tempECDHPublicKey = tmpECDH.generateKeys();
// Set the public key to be equal to the
// above generated key in the Buffer format
geekOne.setPublicKey(tempECDHPublicKey);
// Get the public key that was set
let geekOnePublicKey = geekOne.getPublicKey();
console.log("Public Key of Geek A is:",
geekOnePublicKey);
輸出:
Public Key of Geek One is:<Buffer 04 01 83 85 b9 13 fd 2b 2b 7a bd 9d 8e 72 d0 bb 95 ec 24 73 51 e5 4d f1 00 68 07 7d 45 5b 37 5c 02 f6 03 56 4e 99 43 5b ba 44 57 4c e9 59 c9 ef b9 f4 … 83 more bytes>
範例2:在這個例子中,生成的 key 是一條不同的曲線。因此,當使用此方法設置此 key 時,它會拋出錯誤,因為它與 ECDH 對象的曲線不匹配。
Javascript
const crypto = require('crypto');
// Generate an ECDH object for geekOne
const geekOne = crypto.createECDH('secp521r1');
// Generate a key with the encryption
// type as SHA256
let hashObj = crypto.createHash('sha256');
let tempPublicKey =
hashObj.update('thisisapublickey', 'utf8').digest();
// Display the generated key
console.log("The generated key is:", tempPublicKey);
// Atttempt to set the public key to
// be equal to the above generated key
geekOne.setPublicKey(tempPublicKey);
輸出:
The generated key is:<Buffer a7 de ff 8e 06 ff 75 5d 3e a0 87 61 8c 92 e1 eb 5d fe 9d d6 6c 27 7d 15 30 6e a7 a6 55 b1 03 02>
node:internal/crypto/diffiehellman:231
this[kHandle].setPublicKey(key);
^Error:Failed to convert Buffer to EC_POINT
at ECDH.setPublicKey (node:internal/crypto/diffiehellman:231:17)
at Object.<anonymous> (G:\tutorials\ecdh-setPublicKey\ex2.js:16:9)
at Module._compile (node:internal/modules/cjs/loader:1095:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1124:10)
at Module.load (node:internal/modules/cjs/loader:975:32)
at Function.Module._load (node:internal/modules/cjs/loader:816:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12)
at node:internal/main/run_main_module:17:47 {
code:‘ERR_CRYPTO_OPERATION_FAILED’
}
參考: https://nodejs.org/api/crypto.html#crypto_ecdh_setpublickey_publickey_encoding
相關用法
- Node.js console.timeLog()用法及代碼示例
- Node.js x509.toLegacyObject()用法及代碼示例
- Node.js fs.fsyncSync()用法及代碼示例
- Node.js process.nextTick()用法及代碼示例
- Node.js GM drawLine()用法及代碼示例
- Node.js GM drawArc()用法及代碼示例
- Node.js GM drawPolyline()用法及代碼示例
- Node.js GM drawBezier()用法及代碼示例
注:本文由純淨天空篩選整理自sayantanm19大神的英文原創作品 Node.js ecdh.setPublicKey() Method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。