【发布时间】:2015-01-01 03:28:25
【问题描述】:
如何比较 t2 中的结果(哈希值)
unsigned char t2[128];
SHA1(t1, strlen(t1),t2);
我有另一个哈希值unsigned char t3[128]; 作为“字符串”(字符序列)?
元素相等失败,打印 t1 时出现奇怪的符号
【问题讨论】:
如何比较 t2 中的结果(哈希值)
unsigned char t2[128];
SHA1(t1, strlen(t1),t2);
我有另一个哈希值unsigned char t3[128]; 作为“字符串”(字符序列)?
元素相等失败,打印 t1 时出现奇怪的符号
【问题讨论】:
您的问题需要进一步澄清。不过,
Elementwise equality fails and weird symbols appear when printing t1
从这一行来看,数组t1 似乎没有正确终止NULL,即不适合用作string。
【讨论】:
我假设您所有的 tx 数组都是哈希值:查看 SHA1 联机帮助页没有关于 NULL 终止字节或字符编码的信息。它大约是bytes,所以我想你不应该尝试将它打印为字符串(即使用%s)。
// print t1 bytes
for(size_t i=0; i<128; i++)
{
printf("0x%2X ", t1[i]);
}
AND,strlen 可能会返回垃圾,请改用显式长度:
SHA1(t1, 128, t2);
所以要比较您的哈希值(相同长度),您可以使用:
int res = memcmp(t2, t3, 128);
或者:
for(size_t i=0; i<128; i++)
{
if(t2[i] != t3[i])
{
printf("Mismatch at index %zu\n", i);
break;
}
}
【讨论】: