HMAC_GOST34194值不匹配
HMAC_GOST341194 value mismatch
我不确定这个地方是否是解决这类问题的正确选择(它与加密有关),但不幸的是,没有其他发现错误的希望。
所以,这是我用来计算HMAC_GOST34194:的代码
HMAC hmac;
string step1, step2, step3;
ipad.assign(blockSize, 0x36);
opad.assign(blockSize, 0x5c);
for (size_t i = 0uL, e = length; i < e; ++i)
{
ipad.replace(i, 1, 1, secret[i] ^ 0x36);
opad.replace(i, 1, 1, secret[i] ^ 0x5c);
}
step1 = ipad + text;
hmac.hash(step1, step1.length(), step2);
step3 = opad + step2;
hmac.hash(step3, step3.length(), mac);
哈希函数经过了双重检查-没有错误,并且所有测试值与其他源相同。
我的区块大小是256。
我使用以下S框(CryptoPro参数集):
const unsigned char S[8][16] = {
{ 10, 4, 5, 6, 8, 1, 3, 7, 13, 12, 14, 0, 9, 2, 11, 15 },
{ 5, 15, 4, 0, 2, 13, 11, 9, 1, 7, 6, 3, 12, 14, 10, 8 },
{ 7, 15, 12, 14, 9, 4, 1, 0, 3, 11, 5, 2, 6, 10, 8, 13 },
{ 4, 10, 7, 12, 0, 15, 2, 8, 14, 1, 6, 5, 13, 11, 9, 3 },
{ 7, 6, 4, 11, 9, 12, 2, 10, 1, 8, 0, 14, 15, 13, 3, 5 },
{ 7, 6, 2, 4, 13, 9, 15, 0, 10, 1, 5, 11, 8, 14, 12, 3 },
{ 13, 14, 4, 1, 7, 0, 5, 10, 3, 12, 8, 15, 6, 2, 9, 11 },
{ 1, 3, 10, 9, 5, 11, 4, 15, 8, 6, 7, 14, 13, 0, 2, 12 },
};
以下是我的一个例子(找到的唯一样本):
K(ASCII) = "s=, ehesttgiyga bnss esi2leh3 mT"
K(in hex) = 733d2c20 65686573 74746769 79676120
626e7373 20657369 326c6568 33206d54 (32 bytes)
text (ASCII) = "This is message, length=32 bytes"
text (in hex) = 54686973 20697320 6D657373 6167652C
206C656E 6774683D 33322062 79746573
HMAC_GOSTR3411 = 4ff66c94 bddaae61 13360514 2b582b9c
0f38bbdf f3d7f0ee 6a9c935d 92bfa107
但是,我的值是:C0F2FE71C3CA016356722646308B69453BB4CD1E232231E04BEB03DB6976F128
将感谢提供更多测试数据或拒绝/验证现有数据的任何帮助。
我找到了这个问题的答案:这个例子不正确,但我的代码中也有一个错误。
因此,假设
K(ASCII) = "s=, ehesttgiyga bnss esi2leh3 mT"
text (ASCII) = "This is message, length=32 bytes"
- ipad||文本哈希为:
E9D755A47F72A558AE5E75F5B141F5B174E7B1FED281436F3FE835D78D0D9F05
- opad||散列(ipad||文本)散列为:
8FF55DDAAB167A22DE98286F10458A1619BC45C88F6EAC9CE947ED3FFB348822
第二个值是HMAC_GOST34194本身。
所有散列都是使用我的代码计算的,并使用参数为cpverify.exe -mk -alg GR3411 "%YOUR_PATH_TO_FILE%hash.txt"
PAUSE
的cpverify进行验证
希望这能帮助人们节省几个小时的时间,不用研究为什么这里的示例HMAC计算错误。
PoC在这里可用。
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- C++调用和定义不匹配
- 模板专用化与派生类不匹配