Hash 两个SHA-256散列的异或

Hash 两个SHA-256散列的异或,hash,sha256,xor,Hash,Sha256,Xor,我正在寻找转换从SHA-256位哈希生成的以下两个哈希值 hash1="8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414" //SHA-256 bit hash of 1234567 hash2="fe68a21fc76bba7b3a3d8e454eca8cd258de68fd08dddf035f23ddbdce6fc049" //SHA-256 bit hash of 7654321 是否可以使用xorhash=

我正在寻找转换从SHA-256位哈希生成的以下两个哈希值

hash1="8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414" //SHA-256 bit hash of 1234567
hash2="fe68a21fc76bba7b3a3d8e454eca8cd258de68fd08dddf035f23ddbdce6fc049" //SHA-256 bit hash of 7654321
是否可以使用xorhash=hash1^hash2? xorhash=75d86d717edac774471f3a13bfeba9af99fb26e209bb8c7318405e57b902345d是输出。
谢谢你的帮助。谢谢

根据您的需要,您有两种选择:

a把一切都当作绳子

在本例中,您需要一个for-each-character循环,该循环将源字符从char转换为整数,执行XOR,然后将结果转换回char。例如:

for(int i = 0; i < 256/4; i++) {
    d1 = hash1[i];
    if( (d1 >= '0') && (d1 <= '9') ) {
        d1 = d1 - '0';
    } else if( ( (d1 >= 'A') && (d1 <= 'F') ) || ( (d1 >= 'a') && (d1 <= 'f') ) ) {
        d1 = d1 - 'A' + 10;
    } else {
        /* Syntax error */
    }
    d2 = hash2[i];
    if( (d2 >= '0') && (d2 <= '9') ) {
        d2 = d2 - '0';
    } else if( ( (d2 >= 'A') && (d2 <= 'F') ) || ( (d2 >= 'a') && (d2 <= 'f') ) ) {
        d2 = d2 - 'A' + 10;
    } else {
        /* Syntax error */
    }
    dr = d1 ^ d2;
    if(dr < 10) {
        dr = dr + '0';
    } else {
        dr = dr - 10 + 'A';
    }
    result[i] = dr;
}
struct myHash {
    uint32_t digit[256/32];
}

struct myHash hash1 = { 0x8bb0cf6e, 0xb9b17d0f, 0x7d22b456, 0xf121257d, 0xc1254e1f, 0x01665370, 0x476383ea, 0x776df414 };
在这种情况下,您可以执行以下操作:

for(i = 0; i < 256/32; i++) {
    result[i] = hash1[i] ^ hash2[i];
}

…对于某些计算机,它可能会将其转换为SIMD,例如,如果计算机支持AVX2的256位操作,那么即使C不支持256位整数,它也可能变成3条指令。

欢迎使用堆栈溢出。请阅读,采取,阅读,以及。最后,请学习如何创建一个您自己尝试的函数,并向我们展示它,以及您的问题描述。我不明白您在问什么。@David-它是两个哈希值的异或。到目前为止,您尝试了哪些代码?有什么办法吗?@Mayuresh两个散列值的异或是什么?你的问题和C有什么关系?您是否正在尝试编写C代码来执行某些操作?如果是,什么?执行SHA256哈希?你真的想要文本输出吗?您正在使用或计划使用哪个图书馆?
result[0] = hash1[0] ^ hash2[0];
result[1] = hash1[1] ^ hash2[1];
result[2] = hash1[2] ^ hash2[2];
result[3] = hash1[3] ^ hash2[3];
result[4] = hash1[4] ^ hash2[4];
result[5] = hash1[5] ^ hash2[5];
result[6] = hash1[6] ^ hash2[6];
result[7] = hash1[7] ^ hash2[7];