当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js ecdh.computeSecret()用法及代码示例


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

参考: https://nodejs.org/api/crypto.html#crypto_ecdh_computesecret_otherpublickey_inputencoding_outputencoding




相关用法


注:本文由纯净天空筛选整理自sayantanm19大神的英文原创作品 Node.js ecdh.computeSecret() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。