1. C# / Говнокод #12384

    +136

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    public override int GetHashCode()
        {
          if (this.FileName == null)
          {
            return base.GetHashCode();
          }
    
          return this.FileName.GetHashCode() + 13;
        }

    почему 13?

    Запостил: taburetka, 02 Января 2013

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

    • Помоему 13 это какоe-то из стандартных генерирующих квадратных уравнений от CRC, не? Может была когда-то самодельная реализация CRC, а потом это все, что от нее осталось...
      Ответить
      • Ой... многочленовое уравнение. Или так не говорят?
        Ответить
    • Случайное число, выпало при подбрасывании костей.
      Ответить
    • CR?
      Ответить
    • 42
      Ответить
    • Помню был тред, где упоминалась история о том, как была допущена бага в реализации алгоритма вычисления МД5. И потом из-за этого злому кулхацкиру при наличии на руках базы с хешами обломался подбор.
      Ответить
      • И эта кулстори, скорее всего, была фейковой. Как идея - неплохо.
        Ответить
        • Да, тогда мы спалили, что вероятность того, что те левые хеши бы совпадали с хешами каких-то других паролей существующих в словаре при верном алгоритме мд5 крайне мала, а для полного перебора нужен суперкомпьтер. Их на дороге не валяется.
          Ответить
          • Вообще, в любом случае, сама идея портить алгоритм может быть интересной. Даже при наличии у противника самого алгоритма (мы на это поправку сделать не можем, потому полагаем), не существует вменяемой инфраструктуры под это дело. Само собой, серьёзный противник просто соберёт свою утилиту на своём кластере заново и ничего не заметит, а доморощенные какиры будут удивляться, почему это md5('pass') не равно ourmd5('pass').
            Главная проблема - нужна достаточная квалификация, в противном случае можно серьёзно ослабить алгоритм, как в плане ускорения, так и при порождении коллизий.
            Ответить
            • Но алгоритм нужно портить аккуратно, так, чтобы не нарушить его математические свойства.

              К примеру - просто сменить стартовые значения в MD5. По идее стойкость от этого не упадет, а вот все существующие тулзы обломают зубы на таком мд5.
              Ответить
              • Заходя дальше, можно вообще реализовать другой алгоритм, просто обозвав его МД5 и обеспечив внешнее сходство.
                Ответить
                • Но если его писать самому - он может оказаться слишком слабым, а если он к тому же используется в опенсурсном проекте, это может оказаться эпик фейлом.

                  Тот же Брюс Шнайер советовал не придумывать свои алгоритмы, если нет соответствующих знаний, а использовать надежные, проверенные временем алгоритмы.
                  Ответить
              • Говорят, на каких-то векторах инициализации стойкость выше, чем у тех, которые выбраны сейчас. А на каких-то - ниже. Сам проверить не могу, ссылок не помню.
                Ответить
                • Х.з. х.з. имхо не должно влиять, это же точно такое же состояние, как и после хеширования любого из блоков... да и начальный вектор там, если не путаю с другим алгоритмом - тупо число пи.
                  Ответить
                  • Ссылок не вспомню, но на полном серьёзе где-то обсуждалось.
                    Ответить
                    • Ну вот серьезные алгоритмы типа 3-DES/GOST/AES нормально работают при любом векторе инициализации... (Ну при правильном использовании режимов конечно, в некоторых режимах строго-настрого запрещается юзать одинаковый IV для разных потоков).

                      Хотя может быть в мд5 и правда есть какая-то лазейка связанная с IV, мало ли... Если статейка потом попадется - киньте плиз, интересно будет почитать.
                      Ответить
                      • Я бы не стал называть Triple Death суръезным алгоритмом.
                        Ну вот кто им мешал сделать вместо 56-бит, стандартные 64?
                        Первый блин комом.

                        >нормально работают при любом векторе инициализации
                        Что это значит?
                        Если речь о таблицах подстановки, то это неправда. Есть очень слабые варианты - их даже можно подобрать самому.
                        Более того ходят слухи что стандартные таблицы DES и ГОСТ были сделаны таким образом, что там есть известная только избранным дырка облегчающая подбор.
                        Ответить
                        • Ненене, таблицы то выбираются специальным образом, и действительно могут быть слабыми и сильными. А вот IV (вектор инициализации) можно выбирать произвольно - во многих режимах можно взять тупо ноль.

                          P.S. Ну я тут конечно не совсем корректно выразился - на IV блочному алгоритму шифрования похуй, ибо IV работает на чуть более высоком уровне - режиме шифрования.
                          Ответить
              • идея правильной порчи алгоритмов, особенно хешей, не нова, вспомните про соление.
                Ответить
          • http://lasecwww.epfl.ch/php_code/publications/search.php?ref=Oech03
            Ответить
      • У меня есть другая, абсолютно реальная история, когда из-за бага в реализации хеш алгоритма пароль тривиально восстанавливался.
        Ответить
    • дюжина + черт
      Ответить
    • Простое число же.
      Ответить
      • простых много
        Ответить
        • Гость прав. Прав настолько что я хотел ограничится идентичным кратким замечанием.
          Рандомное простое число, чтобы хеш файла не совпадал с хешем строки с его именем.
          Задача на дом:
          public int Boolean.hashCode() {
          	return value ? 1231 : 1237;
              }

          Почему взяты 1231 и 1237?
          Ответить

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