node.js - 从十六进制编码的 p 和 g 参数创建一个 Diffie Hellman 对象
问题描述
在我的应用程序中,我通过 XMPP 消息接收到diffie hellman p 和 g 参数,例如:
<message to="admin@0.0.0.0/4fjd0564xh" from="keygen1546701622316@conference.0.0.0.0/admin" type="groupchat"><body>
<x xmlns="http://pcmagas.tk/gkePlusp#intiator_key">
<p>d521b3f62a54c9a7274a2e6da70fb977e21129f0b40b0ec328b4c584572dea3c24a9d41feb13bbbcc2a894cbb8d26ccb036589ec55d2ebb32f4ec7d5c9eaa686820f06f8ff4863720f746b7b3bcd51be8b7bdfcead397600621c9b3932b3aebbe01c555e97bb6068de823f234851a883eba3d916255cfa3320d0d12c4c5fc80a263782b52636f0b978a765439c434ad71511f6be91b0f8ccb2a3cf3b54b02a68730354f3f4ff555a2f7c0bfaebc21fbbac003d7bd9e9b2b2f9bd7d73cf385a1c04c094d721a2adb0ef5f4b725ba529bd74bd73d23e0cc0f14e87d6df7bf6251ab0b8b54b63b01188675dbf56113a0e956e39e3230a3b86494902250211e762eb</p>
<g>02</g>
</x>
</body>
</message>
正如 Node.jscrypto
模块所说,您可以通过提供g
参数长度的整数来启动 Diffie Hellman:
const alice = crypto.createDiffieHellman(2048);
或通过提供p
的和g
参数:
const bob = crypto.createDiffieHellman(alice.getPrime(), alice.getGenerator());
但是在我的流中,键被编码为十六进制字符串,因此我如何将它们转换为适当的对象以制作适当的diffieHellman
对象?
解决方案
如以下代码所示的函数getPrime
并getGenerator
生成一个Buffer
对象:
const crypto = require('crypto');
const k1 = crypto.createDiffieHellman(2048);
const p = k1.getPrime();
const g = k1.getGenerator();
// Outputs true,true
console.log(Buffer.isBuffer(p), Buffer.isBuffer(g));
因此,您可以通过以下方式从十六进制编码字符串生成 Diffie Hellman 对象:
//pInHex,gInHex hex encoded p and g
const p = Buffer.from(pInHex,'hex');
const g = Bugger.from(gInHex,'hex');
const dh = crypto.createDiffieHellman(p, g);
正如您根据文档所看到的,您可以从十六进制编码的字符串创建缓冲区。
推荐阅读
- reactjs - next-auth / urql - 访问访问令牌以在 urql 客户端中设置授权标头
- c# - 为什么我们不能设置在结构中创建的属性的值而不在 C# 中创建结构的构造函数?
- mongodb - 聚合在插入时不会按顺序返回记录
- java - 我可以在 ByteBuddy 中重新定义要扩展的超类吗?
- python - 如何从列表中获取所有 2 x 2 组合?
- android - SQLDelight 迁移
- javascript - 更改属性时不会更新 Getter
- scheme - SICP 练习 1.11
- python - Python 客户端不与 ElasticSearch 通信
- java - 如何在 java 中实现 ASP.NET Core Identity 框架的密码哈希