Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
hash 14.12.01 12:34 Число просмотров: 3300
Автор: zelych Статус: Member
|
всё значительно проще..
если тебе надо поменять хешируемый блок и получить определённое значение хеша, тогда вот:
int hash(int *b)
{ int x,y,i=0;
x=b[0];
do{y=b[++i]; x=fu(x,y);}while(i!=0x100);
return x;
}
если поменять b[a] на b`[a], то поменяется x начиная с i-ой итерации, соответственно надо найти такое у, что fu( b`[a], y ) = fu( b[a], b[a+1] ) и поставить его вместо b[a+1]..
получается уравнение:
дано - x и fu( x, y )
найти - y
int fu(int x1,int x2)
{ int a,b,c,d,i,j=0;
do{ a=0;
b=x1&0x80000057;
for(i=0;i<0x20;i++) {if(b&1)a++; b>>=1;}
//
x1=(x1>>1)&0x7fffffff;
// не совсем понятно зачем нужно &0x7ffff
if(a&1)x1|=0x80000000;
/* а вообще очень смахивает на регистр сдвига с полиномом обратной связи 0x80000057 и начальным заполнением x1
однако это не важно
*/ a=0; c=x2&x1;
for(i=0;i<0x20;i++) {if(c&1)a++; c>>=1;}
// а вот здесь a&1 - это скалярное произведение x2 и x1
d=(d<<1)a&1);
}while(++j!=0x20);
return d;
}
что из этого следует:
d(32-i) = <x2, x1(i+1)>, для i=0..31.
d(i) - i-й бит из d;
<.,.> - скалярное произведение;
x1(i) - регистр сдвига сдвинутый i раз.
получается 32 уравнения и 32 неизвестных..
решается очень просто:
пишем матричное уравнение
(D) = (X2)(X1)
d - строка из 32-х элементов
x2 - столбец
x1 - матрица 32х32, в которой i-я строка равна x1(i+1)
решаем матричное уранение:
(X2) = (D)(X1`), где X1` - матрица обратная к X1..
вот и всё..
P.S. глядя на исходник подумалось: "а зачем вообще люди пробелы придумали?"
|
- hash - nimrod 13.12.01 13:29 [2493]
- hash - iddqd 13.12.01 15:06 [3468]
- hash - nimrod 13.12.01 16:59 [3207]
- hash - iddqd 13.12.01 17:24 [3429]
- hash - nimrod 13.12.01 17:42 [3088]
- hash - iddqd 13.12.01 17:59 [3167]
- hash - nimrod 13.12.01 18:09 [3079]
- hash - iddqd 13.12.01 18:33 [3034]
- hash - zelych 14.12.01 12:34 [3300]
|
|
|