将sha256哈希为16bytes

时间:2013-06-19 13:59:43

标签: hash hashtable

hiiii, 为了减少我的sha256长度,我用自己的哈希表(来自很多例子)制作了我自己的哈希算法,看看这个代码源:

  struct // structure pour stoké les valeurs de h
{
    int a;
} hh[8];
struct DAT // 256 valeur de 0-255 aléatoir
{
    int a;
}
T[256]={256 value }

ch=x[0]; // save the first byte
for (j=0; j<8; j++)
{
    // a basic hash function Xor
    h=0;

    for (i=0; i<len; i++)
    {
        h=T[h ^ x[i]].a;
        //printf("%d ",h);
    }
    hh[j].a=h; // save the result
    //printf("%d ",hh[j].a);
    x[0]=x[0]+1; // increment the first element by one
}
x[0]=ch; // restor the first byte 


// concatenate the 8 stored values of h

我重新设定了这个功能

wsprintf(hex,"%02X%02X%02X%02X%02X%02X%02X%02X",
    hh[0].a, hh[1].a,
    hh[2].a, hh[3].a,
    hh[4].a, hh[5].a,
    hh[6].a, hh[7].a);

通过这个循环的

printf("\n = ");

for (i=0; i<8; i++)
{
    hex[i]=hh[i].a;
    printf("%02X",hex[i]);

}

现在我想把我的哈希压缩到一半

printf("\n compressed hash= ");
for (i=0; i<4; i++)
    {

        lhex[k] = hh[i].a ^ hh[i+4].a;
        printf("%02X",lhex[k]);
        fprintf(fw,"%02X",lhex[k]);
        k++;
    }

问题: 如果我使用自己的功能,这是正确的吗? 当我用循环替换wsprint来连接8个存储值时它是否正确? 对于最后一个,我知道它的结果,因为如果我有2个像这样的L + R和L'+ R'(L&amp; R用于左右位),如果我的两个哈希有L = R'和R = L'我会有相同的压缩哈希:(,有任何想法吗? Thnx iOuss

0 个答案:

没有答案