- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
#define KOEF_A 31415926
#define KOEF_B 27182818
#define INIT_VAL 3091976
unsigned long dVal;
unsigned char rnd()
{
unsigned long r = dVal*KOEF_A + KOEF_B;
int m = dVal % 8;
dVal = r >> m;
dVal++;
return (unsigned char)(dVal & 0xFF);
}
void Encode(void* data, int len)
{
if( len < 1 ) return;
for( int i = 0; i < len; i++ )
{
int xval = rnd();
((char*)data)[i] ^= xval;
}
}
guest 06.08.2009 12:40 # 0
И что конкретно в данном алгоритме настолько хренового, что этот кусок кода был кинут сюда?
guest 06.08.2009 17:40 # −1
а то, что rnd() возвращает константу ;)
guest 10.08.2009 17:32 # 0
guest 10.08.2009 23:26 # −1
xaionaro 12.08.2009 23:53 # 0
Во-вторых dVal меняется в самой функции, т.е. rnd() не константа даже без "во-первых";
В-третих dVal не занулён, а следовательно в нём изначально находится значение, которое было в памяти в тот момент, когда там разместился dVal (что зачастую может быть более случайным значением чем даже натуральный генератор псевдослучайных чисел /dev/random).
Даже не знаю, у меня замечания в голове не умещаются, т.ч. на этом закончим :)
guest 12.01.2010 14:43 # 0
guest 11.08.2009 14:37 # −1
xaionaro 12.08.2009 23:55 # 0
Во-вторых, с чего вы взяли что rnd() константа?
В-третих, с чего вы взяли что если rnd() не константа, то нельзя дешифровать сообщение? (ведь изменения rnd() очень даже обратимые).
xaionaro 12.08.2009 23:57 # 0
guest 20.08.2009 11:37 # 0