两个不同阵列的平等

时间:2014-11-05 02:24:06

标签: c hash openssl sha

如何比较t2(哈希值)

中的结果
unsigned char t2[128];

SHA1(t1, strlen(t1),t2);

使用另一个哈希值unsigned char t3[128];作为'字符串'(字符序列)?

元素相等失败,打印t1

时出现奇怪的符号

2 个答案:

答案 0 :(得分:0)

您的问题需要进一步澄清。但是,

Elementwise equality fails and weird symbols appear when printing t1

从这一行开始,似乎数组t1未正确NULL终止,即没有资格用作string

答案 1 :(得分:0)

我假设您的所有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;
    }
}