2012-09-10 80 views
0

我有以下算法(基于SHA-1哈希函数实现)。它产生“abc”的散列。结果是未签名的char*摘要。C++哈希算法

#define BYTES "abce" 
SHA1* sha1 = new SHA1(); 
sha1->addBytes(BYTES, strlen(BYTES)); 
unsigned char* digest = sha1->getDigest(); 

我想rehash结果摘要。我以这种方式做到这一点,但不起作用。 char* S定义了与#define BYTES "abce"不同的东西吗?

char* S = reinterpret_cast<char*>(digest); 
sha1 = new SHA1(); 
sha1->addBytes(S, strlen(S));   
unsigned char* digest1 = sha1->getDigest(); 

回答

5

千万不要使用strlen上的任何东西,但C风格的字符串。

  sha1->addBytes(S, strlen(S));   

这没有意义。你可能想要20,SHA摘要的大小。

+0

沿着相同的路线,我建议不要使用'strlen()'作为原始字符串。或者声明为const char BYTES [] =“abc”;',然后使用'sizeof(BYTES)'或者使用'std :: string'。如果你处理随机二进制数据,使用单独的长度属性,或者(更好),去'std :: vector'。 – onitake