NodeJs 加密模塊允許我們使用加密算法來保護機密信息。 Diffie-Hellman 也是用於在兩個實體(發送方/接收方)之間安全共享 key 的加密算法之一。
Diffie-Hellman 算法基於大素數 (P) 和生成器 (G)。 P的原根是G。
原根:設 G 是素數 P 的原根,則 - G 是 [ 1, P - 1 ] 之間的整數,X 是 [ 1, P - 2 ] 之間的整數,因此 G X mod P 的值不同每個 X 值。
NodeJS diffieHellman.verifyError:由於初始化期間執行的檢查而包含警告或錯誤的位字段。該方法指示Diffie-Hellman對象初始化過程中是否出現錯誤。
如果出現錯誤,則該位值將根據錯誤類型而定,否則將為 0。
以下是決定 diffieHellman.verifyError 值的屬性:
DH_CHECK_P_NOT_SAFE_PRIME: 2, DH_CHECK_P_NOT_PRIME: 1, DH_UNABLE_TO_CHECK_GENERATOR: 4, DH_NOT_SUITABLE_GENERATOR: 8,
- 如果diffieHellman.verifyError方法返回2意味著指定的素數不是安全素數。
- 如果diffieHellman.verifyError方法返回1,則表示該數字不是質數。
- 如果diffieHellman.verifyError方法返回4,則表示讀取生成器值時出現錯誤。
- 如果diffieHellman.verifyError方法返回8,則表示所使用的生成器不適合生成具有指定素數的Diffie-Hellman key 對象。
這些數值已在 crypto.constants 對象中為每種類型的錯誤定義。
讓我們使用 createDiffieHellman() 方法創建一個 Diffie-Hellman 對象。以下是創建的語法
Diffie-Hellman key 交換對象:
crypto.createDiffieHellman( prime, primeEncoding, generator, generatorEncoding )
參數:
- Prime:可以包含 String、Buffer、TypedArray 或 DataView 類型的元素。
- primeEncoding:這是素數字符串編碼,屬於字符串類型。
- Generator:可以包含數字、字符串、緩衝區、TypedArray 或DataView 數據。默認值為 2。
- generatorEncoding:這是生成器字符串的編碼並返回一個字符串。
返回:返回Diffie-Hellman key 交換對象。
以下是diffieHellman.verifyError方法的語法:
diffieHellman_object_name.verifyError
Parameters: 沒有參數,它是一個屬性,而不是一個函數。
返回:一個號碼.
示例 1:DH_CHECK_P_NOT_SAFE_PRIME:2
在此示例中,我們將根據素數和生成器值創建 Diffie-Hellman 對象。在這種情況下,指定的素數 ( 61 ) 不是安全素數,我們嘗試使用 diffieHellman_object_name.verifyError 屬性獲取與此不安全素數的 DH_CHECK_P_NOT_SAFE_PRIME key 相對應的錯誤值 (2)。
正如我們所討論的,如果 diffieHellman.verifyError 方法返回值 2,則表明指定的素數不是安全素數。
Javascript
// Importing the required Crypto module
const crypto = require('node:crypto');
// Creating the diffieHellman object -
// createDiffieHellman( prime, generator )
const bob = crypto.createDiffieHellman('61',2);
// verifying the Error value -
console.log(bob.verifyError);
輸出:
2
示例 2:DH_CHECK_P_NOT_PRIME:1
如果指定的 P 不是實際素數,則該屬性將返回 1。
在此示例中,我們將數字 82 傳遞給 createDiffieHellman() 方法,該方法不是素數。我們的目標是使用 diffieHellman_object_name.verifyError 屬性實現與 DH_CHECK_P_NOT_PRIME key 相對應的錯誤值 1。
Javascript
// Importing the required Crypto module
const crypto = require('node:crypto');
// Creating the diffieHellman object -
// createDiffieHellman( prime, generator )
const bob = crypto.createDiffieHellman('82',2);
// verifying the Error value -
console.log(bob.verifyError);
輸出:
1
示例 3:DH_NOT_SUITABLE_GENERATOR:8,
在此示例中,我們傳遞 2 作為素數,傳遞 50 作為生成器。 50 並不是素數 2 創建 Diffie-Hellman 對象的完美生成器匹配。我們的目的是獲取與 DH_NOT_SUITABLE_GENERATOR 鍵對應的錯誤值 (8),因為 50 不是合適的生成器。
如果生成器不適合指定的質數並生成 Diffie-Hellman 對象,則該屬性將返回 8。
Javascript
// Importing the required Crypto module
const crypto = require('node:crypto');
// Creating the diffieHellman object -
// createDiffieHellman( prime, generator )
const bob = crypto.createDiffieHellman(2,50);
// verifying the Error value -
console.log(bob.verifyError);
輸出:
8
示例 4:如果沒有錯誤 - 0
在此示例中,我們的目標是獲得誤差值 (0)。這個0表示Diffie-Hellman對象的創建沒有錯誤。 2 是質數,7 是合適的生成器,因此 Diffie-Hellman 對象將被創建而不會出現任何錯誤。
Javascript
// Importing the required Crypto module
const crypto = require('node:crypto');
// Creating the diffieHellman object -
// createDiffieHellman( prime, generator )
const bob = crypto.createDiffieHellman(7,2);
// verifying the Error value -
console.log(bob.verifyError);
輸出:
0
參考:https://nodejs.org/api/crypto.html
相關用法
- Node.js diffieHellman.getPrime()用法及代碼示例
- Node.js diffieHellman.setPrivateKey()用法及代碼示例
- Node.js diffieHellman.getPublicKey()用法及代碼示例
- Node.js diffieHellman.generateKeys()用法及代碼示例
- Node.js diffieHellman.computeSecret()用法及代碼示例
- Node.js diffieHellman.getGenerator()用法及代碼示例
- Node.js diffieHellman.setPublicKey()用法及代碼示例
- Node.js diffieHellman.getPrivateKey()用法及代碼示例
- Node.js diagnostics_channel.hasSubscribers(name)用法及代碼示例
- Node.js diagnostics_channel.channel(name)用法及代碼示例
- Node.js dns.getServers()用法及代碼示例
- Node.js dns.lookup()用法及代碼示例
- Node.js dns.lookupService()用法及代碼示例
- Node.js dns.resolve()用法及代碼示例
- Node.js dns.resolve4()用法及代碼示例
- Node.js dns.resolve6()用法及代碼示例
- Node.js dns.resolveAny()用法及代碼示例
- Node.js dns.resolveCname()用法及代碼示例
- Node.js dns.resolveMx()用法及代碼示例
- Node.js dns.resolveNaptr()用法及代碼示例
- Node.js dns.resolveNs()用法及代碼示例
- Node.js dns.resolvePtr()用法及代碼示例
- Node.js dns.resolveSoa()用法及代碼示例
- Node.js dns.resolveTxt()用法及代碼示例
- Node.js dnsPromises.getServers()用法及代碼示例
注:本文由純淨天空篩選整理自harishcarpenter大神的英文原創作品 Node.js diffieHellman.verifyError Property。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。