C++ 将Node.js HMAC转换为C++;

C++ 将Node.js HMAC转换为C++;,c++,node.js,hmac,crypto++,C++,Node.js,Hmac,Crypto++,我一直在做一个项目,作为项目的一部分,我需要转换Node.js代码 var hash = crypto.createHmac('sha512', key).update(text).digest('hex'); C++。我决定使用Crypto++,生成以下代码: //Creating the key from an integer instead of a string or byte array char bytes[sizeof key]; std::copy(static_cast&l

我一直在做一个项目,作为项目的一部分,我需要转换Node.js代码

var hash = crypto.createHmac('sha512', key).update(text).digest('hex');

C++。我决定使用Crypto++,生成以下代码:

//Creating the key from an integer instead of a string or byte array
char bytes[sizeof key];
std::copy(static_cast<const char*>(static_cast<const void*>(&key)),
    static_cast<const char*>(static_cast<const void*>(&key)) + sizeof key,
    bytes);
SecByteBlock key(bytes, sizeof(bytes));

//Create HMAC using server seed as key and client seed as message
HMAC< SHA512 > hmac(key, key.size());
string plain = "HMAC Test";
string mac, encoded;

StringSource ss2(text, true, new HashFilter(hmac, new StringSink(mac)) /* HashFilter*/);
//从整数而不是字符串或字节数组创建密钥
字符字节[sizeof key];
标准::复制(静态强制转换(静态强制转换(&键)),
静态强制转换(静态强制转换(&key))+sizeof key,
字节);
SecByteBlock密钥(字节,sizeof(字节));
//使用服务器种子作为密钥和客户端种子作为消息创建HMAC
HMACHMAC(key,key.size());
字符串plain=“HMAC测试”;
字符串mac,编码;
StringSource ss2(文本,true,新哈希过滤器(hmac,新StringSink(mac))/*哈希过滤器*/);

这两个代码块等效吗?我对JS非常熟悉,所以我不能肯定C++代码在功能上是完全正确的。

使用测试向量运行它们。如果结果不同,那么Node.js可能会使用UTF-16之类的编码,而不是字节字符串。如果您提供生产代码,那么我可以告诉您有关Crypto++中使用的更多信息。目前,
char字节[sizeof key]
然后稍后
SecByteBlock键(字节,sizeof(字节))无法编译。如果是指针,则键的大小也可能是错误的。另请参见Crypto++wiki上的。使用测试向量运行它们,如。如果结果不同,那么Node.js可能会使用UTF-16之类的编码,而不是字节字符串。如果您提供生产代码,那么我可以告诉您有关Crypto++中使用的更多信息。目前,
char字节[sizeof key]
然后稍后
SecByteBlock键(字节,sizeof(字节))无法编译。如果是指针,则键的大小也可能是错误的。另请参见Crypto++wiki上的。