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


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


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




相关用法


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