1. Си / Говнокод #11511

    +132

    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
    int enctypex_decoder_rand_validate(unsigned char *validate) {
        int     i,
                rnd;
    
        rnd = ~time(NULL);
        for(i = 0; i < 8; i++) {
            do {
                rnd = ((rnd * 0x343FD) + 0x269EC3) & 0x7f;
            } while((rnd < 0x21) || (rnd >= 0x7f));
            validate[i] = rnd;
        }
        validate[i] = 0;
        return(i);
    }

    Запостил: WGH, 01 Августа 2012

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

    • >enctypex

      added '+ 0x269EC3'
      Ответить
    • Несмотря на то, что функция заканчивается на validate, она генерирует случайный идентификатор...

      > ~time(NULL)
      time(NULL) недостаточно случаен для сидирования им этого говногенератора? ;)

      P.S. Если не туплю, то данный генератор создает не более 128 различных идентификаторов (а, скорее всего, намного менее).
      Ответить
      • Повторюсь
        http://govnokod.ru/7393#comment99895
        Ответить
        • Но здесь же не сложный и запутанный алгоритм. Значит он всегда дает хорошие простые числа.
          Ответить
      • >не более 128
        N & 0x7f = [ 0 ..127]
        Ответить
      • Что-то как-то очень мало... максимально 94 * 8 должно быть, или какие-то комбинации не возможно получить сложением и умножением на эти числа, предположим, только четные или только нечетные (вроде тоже нет, т.как если rnd был четным на предыдущей итерации, то станет нечетным и наоборот.
        Ответить
        • Так тут каждый следующий символ однозначно зависит от предыдущего. Поэтому первый символ однозначно определяет все остальные. А первый символ имеет не более 94 вариантов.

          P.S. Про 128 я конечно ступил... Код генерит не более 94 различных восьмисимвольных строк.
          Ответить

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