Node.js ecdh.setPublicKey() 方法

Node.js ecdh.setPublicKey() 方法

ecdh.getPublicKey() 方法是crypto模块中ECDH类的内置应用程序编程接口,用于设置椭圆曲线Diffie-Hellman(ECDH)对象的公钥。可以使用encoding参数指定密钥的编码方式。

通常不需要使用此方法,当需要计算共享秘密时,可以使用generateKeys()和setPrivateKey()方法。

如果指定曲线的公钥无效,则会抛出错误。

语法:

ecdh.setPublicKey( publicKey, encoding )

参数:

该方法接受两个参数,如上所述,并在下面进行描述:

  • publicKey: 需要设置的公钥。可以以字符串、ArrayBuffer、Buffer、TypedArray或DataView的形式给出。
  • encoding: 返回值的编码方式。这是一个可选参数。

下面的示例演示了这个方法:

示例 1:

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);

输出:

Geek One的公钥是:<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个字节>

示例2: 在这个示例中,生成的密钥是另一条曲线。因此,当使用此方法设置此密钥时,会抛出错误,因为其与ECDH对象的曲线不匹配。

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);
 
// Attempt to set the public key to 
// be equal to the above generated key
geekOne.setPublicKey(tempPublicKey);

输出:

生成的密钥是:<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);   
^   
错误:将 Buffer 转换为 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程