Node.js diffieHellman.computeSecret() 方法

Node.js diffieHellman.computeSecret() 方法

diffieHellman.computeSecret() 方法是crypto模块中DiffieHellman类的内置应用程序编程接口,用于计算DiffieHellman(dh)秘密密钥。

语法:

diffieHellman.computeSecret(otherPublicKey[, 
inputEncoding][, outputEncoding])

参数: 此方法接受以下参数。

  • otherPublicKey: 此方法将对方的公钥作为第一个参数。
  • inputEncoding: 指定 otherPublicKey 的编码。如果没有提供,预期的是Buffer、TypedArray或DataView。
  • outputEncoding: 如果提供了String,则返回字符串,否则返回Buffer。

返回值: 此方法返回diffieHellman共享秘密密钥。

示例1:

index.js

// Node.js program to demonstrate the 
// diffieHellman.computeSecret() method 
  
const crypto = require('crypto') 
  
// Instance of diffieHellman class... 
const alice = crypto.createDiffieHellman(512); 
const bob = crypto.createDiffieHellman( 
        alice.getPrime(), alice.getGenerator()); 
  
// Generate otherPublicKey 
// Pass 'base64' as encoding parameter 
const aliceKey = alice.generateKeys('base64'); 
const bobKey = bob.generateKeys('base64'); 
  
// Exchange and generate the secret... 
// inputEncoding = 'base64' because otherPublicKey 
// is 'base64' encoded 
// Return value should be 'hex' encoded because  
// outputEncoding = 'hex'  
const aliceSecret = alice.computeSecret(bobKey, 'base64', 'hex'); 
const bobSecret = bob.computeSecret(aliceKey, 'base64', 'hex'); 
  
if( aliceSecret === bobSecret )  
    console.log(`Symmetric key : ${ aliceSecret }`)

使用下面的命令运行 index.js 文件:

node index.js

输出:

Symmetric key : da884ccb0e24bf7e748f66998550b
f21f96b887e1f936478cdbc63b7806bd2403fd3aa28e5dbf58
bbabeb6f829dd86453eb0985b5ff593fcf7a8e1da20256b2a

示例2: 另一个示例,不提供 outputEncoding。

index.js

// Node.js program to demonstrate the 
// diffieHellman.computeSecret() method 
  
const crypto = require('crypto') 
  
// Instances of diffieHellman class 
const alice = crypto.createDiffieHellman('modp15'); 
const bob = crypto.createDiffieHellman('modp15'); 
  
// Pass 'base64' as encoding parameter 
const aliceKey = alice.generateKeys('base64'); 
  
// Pass 'hex' as encoding parameter 
const bobKey = bob.generateKeys('hex'); 
  
// Pass inputEncoding = 'hex' because Bob's key  
// 'hex' encocded 
// No outputEncoding provided 
// Return Buffer  
const aliceSecret = alice.computeSecret(bobKey, 'hex'); 
  
// Pass inputEncoding = 'base64' because Alice's 
// key 'base64' encocded  
// No outputEncoding provided 
// Return Buffer 
const bobSecret = bob.computeSecret(aliceKey, 'base64'); 
  
const isSymmetric = aliceSecret.equals(bobSecret) 
  
if ( isSymmetric ) 
    console.log('Symmetric key : ', aliceSecret)

运行以下命令使用 index.js 文件:

node index.js

输出:

Symmetric key :  <Buffer 6d 1a 6c 00 34 6c>

示例3: 另一个没有提供 inputEncoding 的示例。将 inputEncoding 设置为 null

文件名: index.js

// Node.js program to demonstrate the 
// diffieHellman.computeSecret() method 
  
const crypto = require('crypto') 
  
// Instances of diffieHellman class 
const alice = crypto.createDiffieHellman('modp15'); 
const bob = crypto.createDiffieHellman('modp15'); 
  
// Generate Key 
alice.generateKeys(); 
bob.generateKeys(); 
  
// Compute Secret 
// inputEncoding is null 
// otherPublicKey expected to be Buffer  
const aliceSecret = alice.computeSecret( 
        bob.getPublicKey() , null, 'base64'); 
  
const bobSecret = bob.computeSecret( 
        alice.getPublicKey(), null, 'base64'); 
  
if (aliceSecret === bobSecret) 
    console.log(`Symmetric key : ${ aliceSecret }`)

使用以下命令运行 index.js 文件:

node index.js

输出:

Symmetric key : abLoALX9

参考:

https://nodejs.org/api/crypto.html#crypto_diffiehellman_computesecret_otherpublickey_inputencoding_outputencoding

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程