2014-09-23 41 views
0

例如,我见过一个文件是这样的:有什么参数的用法在SHA1()函数的详细c语言

char data[] = "Hello, world!"; 

size_t length = sizeof(data); 

unsigned char hash[SHA_DIGEST_LENGTH]; 

SHA1(data, length, hash); 

然后,我发现了一个实例几乎喜欢。但是区别是SHA1(data, length - 1, hash);所以,我有点困惑。我应该使用"sizeof(data)"还是"sizeof(data)-1"?提前致谢。

+0

@bot,感谢您的好意,事情是,我想散列多个字符串,比如“hello,world”,然后将散列字符串连接到更长的字符串,然后将较长的字符串转换为一些特定元素类型。当我这样做时,我使用了一些与“长度”和缓冲区类似参数的函数,如snprintf()等,所以我发现我需要了解任何参数的含义,所以我的问题可能有点白痴......无论如何。谢谢你的帮助。 – 2014-09-23 12:53:54

回答

2

它取决于你想散列的实际有效载荷。

  • sizeof data包括零终止符。
  • sizeof(data) -1strlen(data)排除零。
+0

@bot,感谢您的好意,事情是我想散列多个字符串,比如“hello,world”,然后将散列字符串连接到更长的字符串,然后将较长的字符串转换为某种特定的元素类型。当我这样做时,我使用了一些与“长度”和缓冲区类似参数的函数,如snprintf()等,所以我发现我需要了解任何参数的含义,所以我的问题可能有点白痴......无论如何。谢谢你的帮助。 – 2014-09-23 12:55:53

+0

'SHA1'函数占用字节长度,它不关心它是否是c字符串。所以这个参数真的意味着需要多少个字节来散列。请注意,示例中的sizeof(data)有14个可见字符。 – 2014-09-23 13:00:24

+0

好的,非常感谢,我明白你的意思。但是,当我在上面得到名为“hash”的散列字符串时,我得到了一个20字节(160位)的长字符串。实际上,我真正想要的是一个160位0-1字符串(一个只有0和1的字符串),我不知道如何计算0-1字符串。你有好主意吗? – 2014-09-23 13:26:49