2013-04-11 5 views
1

Я знаю, как зашифровать:Как дешифровать с помощью hashlib в python?

encrypted = hashlib.sha256('1234').hexdigest() 

, но я не уверен, как расшифровать это ??

decrypted = decrypt(encrypted) 
+3

Это не так, как работает хеширование. В общем, весь смысл хэша заключается в том, что его нельзя отменить. Хеширование не является методом шифрования. – BrenBarn

+0

[wikipedia] (http://en.wikipedia.org/wiki/Hash_function) имеет хорошую статью о хешах –

+0

Просто подумайте об этом. Если вы можете «расшифровать» хэш, который очень короткий, 32 байта для SHA256, у вас будет конечный метод сжатия. Но, конечно, вы не можете, для любых данных, которые длиннее хэша, есть хеш-коллизии, другими словами разные данные, которые производят один и тот же хеш (но с криптографически защищенным хэшем, подобным SHA256, вы не можете найти или создать столкновений с текущие или предсказуемые компьютеры). – hyde

ответ

12

Точка хэша как SHA256, что она должна быть функцией один из способов (хотя существование истинных функций в одну сторону все еще остается открытым вопрос, см http://en.wikipedia.org/wiki/One-way_function).

Примечание http://en.wikipedia.org/wiki/Cryptographic_hash_function:

The ideal cryptographic hash function has four main properties: 

    1. it is easy to compute the hash value for any given message 
    2. it is infeasible to generate a message that has a given hash 
    3. it is infeasible to modify a message without changing the hash 
    4. it is infeasible to find two different messages with the same hash. 

Если бы вы могли повернуть его вспять, то вы нарушаете правило 2. Эти правила позволяют сказать другой стороне, что они имеют какую-то информацию (например, пароль), не раскрывая информация. Например, см википедию: http://en.wikipedia.org/wiki/Cryptographic_hash_function#Illustration

Если вам нужно обратимость см Simple way to encode a string according to a password?, вы можете использовать что-то слабое, как Vignere, но есть также пример использования PyCrypto:

from Crypto.Cipher import AES 
import base64 

cipher = AES.new(secret_key,AES.MODE_ECB) # never use ECB in strong systems obviously 
encoded = base64.b64encode(cipher.encrypt(msg_text)) 
# ... 
decoded = cipher.decrypt(baes64.b64decode(msg_text)) 

Если вы хотите обратимый хэш-функции, см. Reversible hash function?

4

Короткий ответ: вы не можете «расшифровать» хэш; это односторонняя функция. Существует большая разница между шифрованием и хешированием.

хеширования

См http://en.wikipedia.org/wiki/Cryptographic_hash_function

Примечание: Можно 'BREAK' некоторых алгоритмов хеширования, но это не дешифрования. Вы найдете более подробную информацию в связи, а также другие алгоритмы, которые также поддерживаются питона

Шифрование

и http://en.wikipedia.org/wiki/Encryption

Пример

Полезным примером хеширования является храня пароли в базе данных, тогда как полезный пример шифрования отправляет ваши банковские реквизиты в интернет-магазин, чтобы что-то купить.

0

Хеши вычисляются с использованием однонаправленных функций, то есть он будет выдавать одинаковый выход для определенного входа, но поскольку он является только однонаправленной функцией, независимо от того, что вы делаете, вы не можете ее расшифровать. Можно попробовать расшифровать его грубой силой, то есть вычислить хеши слов из словаря и сравнить его с хешем, который вы хотите расшифровать. Чтобы сэкономить время вычисления хеш словарных слов, есть доступные таблицы радуги, содержащие хеши со словами.

чтения: http://en.wikipedia.org/wiki/Rainbow_table

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

1

Это действительный вопрос, возможно, не поставленный правильно.

ОП, я думаю, что вы пытаетесь проверить хэшированное значение против неуправляемого?

hashed = hashlib.sha256('1234').hexdigest() 
hashedstring = '1234' + ',' + hashed 

сейчас, чтобы проверить, что хед == исходное значение. Итак, разобрать кусок до и после запятой. Hash 1234 и сравните его со значением хэша.

def check_secure_val(h): 
    commapos = h.find(",") 
    val = h[0:commapos] 
    hashval = h[commapos+1:-1] 
    rehashval = hash_str(val) 
    if rehashval == hashval: 
     return val 

, где вход ч представляет собой строку формата "VAL, (HASHEDSTRING)"

и hash_str это функция, которая хешей.

0

Не-очень-точная Аналогии: Шифрование, как кто-то носить маскировку ... принимая Hash как принимать их отпечатки пальцев!

Вы можете вернуть «оригинального» человека, удалив/перевернув маскировку, но вы не можете сделать это из набора отпечатков пальцев!

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

  • Нет связанных вопросов^_^