在下面的C++代码中,SHA1应该返回20个长度的哈希值。大多数情况下,id
的长度为20(这是正确的)。但有时是6或4。不知道为什么。请帮忙。
#include <openssl/sha.h>
#include <limit.h>
#include <other common libraries>
void calc_id(char * ip, unsigned short port, unsigned char *id)
{
char data[256];
int len;
//format print
len = snprintf(data, 256,"%s%u", ip, port);
cout<<"length is :: "<<len<<endl;
cout<<"data is ::" << data<<endl;
//id is just the SHA1 of the ip and port string
SHA1((unsigned char *) data, len, (unsigned char *) id);
cout << "SHA1 hash is :: " << id << endl;
cout << "length of hash is" << lengthOfU(id) <<endl;
return;
}
int lengthOfU(unsigned char * str)
{
int i = 0;
while (*(str++))
{
i++;
if (i == INT_MAX) //INT_MAX from limit.h
return -1;
}
return i;
}
ip就像127.0.0.1
端口类似于6671
我正在尝试为ip port
对计算一个唯一的id。SHA1散列将是一些"散列";特别的";字符,但长度应为20。
SHA1和其他散列一样,是一个二进制字节序列。不要在上面使用strlen
(也不要手写自己的strlen
)。如果有一个