首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HMACSHA1关闭2个字节

HMACSHA1关闭2个字节
EN

Stack Overflow用户
提问于 2011-09-20 20:43:57
回答 1查看 434关注 0票数 1

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

SHA1.cpp:

代码语言:javascript
复制
fIn = fopen(szFileName, "rb");

代码语言:javascript
复制
fIn = fopen_s(szFileName, "rb");

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

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

代码语言:javascript
复制
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太复杂和愚蠢了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-20 20:53:57

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

也许这就解决了你的问题:

代码语言:javascript
复制
for(int i=0;i<sizeof(digest);i++)
    std::cout << setfill('0') << setw(2) << hex << (int)digest[i];
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7485332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档