1. C++ / Говнокод #1455

    +143.3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 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, 04 Августа 2009

    Комментарии (10) RSS

    • Xaionaro:
      И что конкретно в данном алгоритме настолько хренового, что этот кусок кода был кинут сюда?
      Ответить
    • К.О.:
      а то, что rnd() возвращает константу ;)
      Ответить
      • с чего вы взяли? а dVal ?
        Ответить
        • хм... после перезапуска программы файл уже не дешифровать походу... ибо дВал уже другой :)
          Ответить
      • Во-первых неизвество что происходить в dVal в остальном коде;
        Во-вторых dVal меняется в самой функции, т.е. rnd() не константа даже без "во-первых";
        В-третих dVal не занулён, а следовательно в нём изначально находится значение, которое было в памяти в тот момент, когда там разместился dVal (что зачастую может быть более случайным значением чем даже натуральный генератор псевдослучайных чисел /dev/random).

        Даже не знаю, у меня замечания в голове не умещаются, т.ч. на этом закончим :)
        Ответить
      • Нормальный генератор псеводослучайных чисел, учим матчасть.
        Ответить
    • А переменная dVal разве не нулями забивается поскольку она кажись глобальная? Автору повезло что rnd() выдает константу. Тоесть таки можно разшифровать то что было зашифровано тем же алгоритмом. Иначе думаю давно бы писюков натыкали за такой код.
      Ответить
      • Во-первых, с чего вы взяли что после перезапуска требуется дешифровка?
        Во-вторых, с чего вы взяли что rnd() константа?
        В-третих, с чего вы взяли что если rnd() не константа, то нельзя дешифровать сообщение? (ведь изменения rnd() очень даже обратимые).
        Ответить
        • Извиняюсь, "во-первых" назначалось другому guest-у, тому что чуть выше. :)
          Ответить
    • А зачем тут (unsigned char)(dVal & 0xFF) приводить к типу чар и обнулять остальные биты? 0_0 Достаточно просто привести к чару)
      Ответить

    Добавить комментарий