ecdh.computeSecret() 方法是加密模塊中 ECDH 類的內置應用程序編程接口,用於使用對方的公鑰創建共享秘密。可以使用各自的參數指定輸入公鑰和輸出 key 的編碼。
當公鑰位於橢圓曲線之外時,會拋出 ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY 錯誤。
用法:
ecdh.computeSecret( otherPublicKey, inputEncoding, outputEncoding )
參數:此方法接受上述和以下所述的三個參數:
- otherPublicKey:它是另一方的公鑰,根據它生成共享秘密。
- inputEncoding:這是一個字符串值,用於指定對方公鑰的編碼。如果未指定此參數,則鍵應為 Buffer TypedArray 或 DataView。
- outputEncoding:這是一個字符串值,用於指定將生成的共享機密的編碼。
返回值:它以指定的編碼返回橢圓曲線 DiffieHellman 共享 key 。當沒有提供編碼時,它作為一個緩衝區返回,否則返回一個字符串。
以下示例演示了該方法:
範例1:在這個例子中,兩個用戶的共享秘密是使用雙方的 key 創建的,然後比較它們是否相等。
Javascript
const crypto = require('crypto');
const geekA = crypto.createECDH('secp521r1');
// Generate keys for geekA
const geekAkey = geekA.generateKeys('base64');
const geekB = crypto.createECDH('secp521r1');
// Generate keys for geekB
const geekBkey = geekB.generateKeys('base64');
// Compute the secrets of both the geeks in base64
// based on the other party's key
let secretA = geekA.computeSecret(geekBkey, 'base64', 'base64');
let secretB = geekB.computeSecret(geekAkey, 'base64', 'base64');
console.log("Secret of A is:", secretA);
console.log("Secret of B is:", secretB);
// Check if the secrets match
console.log(secretA == secretB ?
"The secrets match!" :
"The secrets do not match")
輸出:
Secret of A is:Ac7p1CjFXyTrdcVxx0HIs0Jqjr3fGb7sUTxfgdUQ+xgXmpJgWKS9SECkFf3ehly+xyvE2MtWFcAxF2gq9F7k7tT5
Secret of B is:Ac7p1CjFXyTrdcVxx0HIs0Jqjr3fGb7sUTxfgdUQ+xgXmpJgWKS9SECkFf3ehly+xyvE2MtWFcAxF2gq9F7k7tT5
The secrets match!
範例2:在此示例中, inputEncoding 參數作為 null 傳遞,因為 generateKeys() 方法在生成 key 時不會對 key 進行編碼。
Javascript
const crypto = require('crypto');
const geekOne = crypto.createECDH('secp521r1');
// Generate keys for geekOne
const geekOneKey = geekOne.generateKeys();
const geekTwo = crypto.createECDH('secp521r1');
// Generate keys for geekTwo
const geekTwoKey = geekTwo.generateKeys();
// Compute the secrets of both the geeks
// The input
let secretGeekOne =
geekOne.computeSecret(geekTwoKey, null, 'base64');
let secretGeekTwo =
geekTwo.computeSecret(geekOneKey, null, 'base64');
console.log("Secret of Geek One is:", secretGeekOne);
console.log("Secret of Geek Two is:", secretGeekTwo);
輸出:
Secret of Geek One is:ACc+SKe9XQMw5quzSEKs0Os+OhGKPRqHIwkW13+lxhs2HNwUEvbZdCEOE/PCzdNKk3v5zqdWSHO0kfRy1qBM8Kc6
Secret of Geek Two is:ACc+SKe9XQMw5quzSEKs0Os+OhGKPRqHIwkW13+lxhs2HNwUEvbZdCEOE/PCzdNKk3v5zqdWSHO0kfRy1qBM8Kc6
相關用法
- 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.computeSecret() Method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。