【问题标题】:HMACSHA1 off by 2 bytesHMACSHA1 关闭 2 个字节
【发布时间】:2011-09-20 12:43:56
【问题描述】:

我在 MSVC++ 2010 Express 中使用这个类:http://www.codeproject.com/KB/recipes/HMACSHA1class.aspx。我正在运行 Vista 32 位。几乎让它工作我只是改变了......

SHA1.cpp:

fIn = fopen(szFileName, "rb");

fIn = fopen_s(szFileName, "rb");

因为没有这个改变,它会说:“error C3861: 'fopen': identifier not found”。

我在 int main 中使用的代码是:

BYTE Key[20] ;
BYTE digest[20] ; 
unsigned char test[] = "Hi There" ;
memset(Key, 0x0b, 20) ;
CHMAC_SHA1 HMAC_SHA1 ;
HMAC_SHA1.HMAC_SHA1(test, strlen((const char *)test), Key, sizeof(Key), digest) ;

for(int i=0;i<sizeof(digest);i++)
    std::cout << hex << (int)digest[i];

int a;
std::cin >> a;

// Check with digest equal to 0xb617318655057264e28bc0b6fb378c8ef146be00
// or not

问题是我的摘要等于:0xb61731865557264e28bc0b6fb378c8ef146be0,它假设等于 0xb617318655057264e28bc0b6fb378c8ef146be00。有关此代码有什么问题以及如何使其工作的任何帮助都会有很大帮助...

或者也许有人可以为我指出正确的方向,以获得更好的 HMACSHA1 课程。 Win32 的 CryptoAPI 既复杂又愚蠢。

【问题讨论】:

  • 这看起来不像是实际哈希创建的问题,而是您的输出代码的问题。我对 C++ 流 API 不熟悉,但由于它省略了 0s,因此它可能将每个字节输出为一个或两个字符的十六进制字符串,省略了前导 0s。

标签: c++ cryptography sha1 hmac hmacsha1


【解决方案1】:

我猜是因为摘要中的某些字节值小于 10,这意味着只写入了一个字符。

也许这可以解决您的问题:

for(int i=0;i<sizeof(digest);i++)
    std::cout << setfill('0') << setw(2) << hex << (int)digest[i];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多