2016-10-26 5 views
0

Я использую выделенный сервер Ubuntu, и я тестирование частного объявленияКак издеваются MD5 хэш столкновение

Я использую библиотеку Python hashlib для генерации MD5-хэш.

Теперь я хочу, чтобы функция MD5 всегда возвращала мой конкретный номер, хотя другой вход. Как я могу это сделать? Есть ли файл конфигурации?

+4

Каков ваш прецедент? Зачем вам ** нужно ** для этого? – sberry

+4

Это проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Расскажите, что вы действительно хотите сделать. – zvone

+0

Я хочу протестировать свое приложение, используя MD5. он быстро открыт. У меня есть тестовый пример о дне рождения MD5. поэтому я хочу, чтобы Md5 всегда имел один и тот же результат, чтобы проверить мое приложение, как он будет обрабатывать это. –

ответ

-1

tl; dr Вы не можете, если только вы не пишете свою собственную функцию или не реализуете патч обезьяны.

Хеши не предназначены для возврата одного и того же значения для нескольких совершенно разных фрагментов данных (хотя неизбежно были столкновения, like with MD5, из-за длины хеша). Вы можете написать свою собственную функцию, чтобы проверить переданное значение и вернуть ему уникальное значение, если вам нужно. Пример:

import hashlib 

def my_func(thing): 
    hash_for_cheese = 'fea0f1f6fede90bd0a925b4194deac11' 
    if thing == "cheese": 
     return hash_for_cheese 
    elif thing == "football": 
     return hash_for_cheese 
    else: 
     return hashlib.md5(thing).hexdigest() 

В этом случае, тот же хэш будет возвращен, если вы прошли cheese или football функции, в противном случае она будет возвращать другой хэш.

Также нет «файла конфигурации». Это всего лишь конкретный алгоритм, написанный в программе на C. Если вы в отчаянии, вы можете изменить его, но он будет работать только в вашей системе.

Вы также можете реализовать так называемый патч обезьяны. Я не осведомлен в этой области, но вы можете узнать больше информации от this SO post.

Как указывали другие, я не могу придумать вариант использования для такого рода проблем, хотя, если вам нужно это сделать, тогда у вас есть свой ответ.

+1

Не нисходящий, но уверен, что вы можете. Вы можете запланировать обезьяну, если хотите. Это ужасная идея, но это очень возможно. – sberry

+1

То, что я имел в виду, когда я сказал, что это плохая идея, не была специфичной для подхода к патчам обезьян, а к общей идее возврата постоянного значения для хэша md5. Я был бы очень удивлен, если бы был допустимый прецедент для такой вещи. – sberry

+2

Это неверно: «Хэши не предназначены для возврата одного и того же значения * когда-либо *», криптографические хэш-функции предназначены для того, чтобы заставить * * * вычислить один и тот же хеш –

3

ОТКАЗ

Как уже упоминалось в комментариях это, скорее всего, идея СТРАШНЫЙ и весьма вероятно, X/Y problem.


Для ясности, это то, что я имел в виду, когда я сказал, что это может быть сделано с помощью обезьяны патч:

import hashlib 

class DummyMD5(): 

    def __init__(self, realmd5): 
     self.md5 = realmd5 
     self.v = None 

    def hexdigest(self): 
     return "12345abcdef" 

    def __call__(self, v): 
     self.v = v 
     return self 

    def __getattr__(self, f): 
     if f not in self.__dict__: 
      return self.md5(self.v).__getattribute__(f) 




_md5 = hashlib.md5 
hashlib.md5 = DummyMD5(_md5) 

Пока это импортируется/выполняется перед hashlib вызов используется в другом месте, он заменит результат hexdigest с постоянным значением. Любой другой метод возвращает реальный md5 (например, digest).

+0

как использовать DummyMD5? моя конфигурация приложения: from haslib import md5. затем используйте MD5 (путь) для возврата вывода. –

+0

Это по-прежнему ужасная идея. Скажите нам, чего вы действительно хотите добиться. – tripleee

+0

@tripleee, мое приложение использует MD5 для хэш-пути объекта. Я хочу протестировать в случае, если MD5 возвратит тот же хеш, что произойдет. так что я хочу изменить функцию MD5, чтобы вернуть тот же хеш. –

Смежные вопросы