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);
i のこのループによって
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 つの格納された値を連結するのは正しいですか? この L+R と L'+R' (左右のビットは L & R) のような 2 つのハッシュがある場合、私の 2 つのハッシュが L=R' と R=L' I同じ圧縮されたハッシュを持ちます:(、それについて何か考えがありますか?Thnx iOuss