Python 3 创建 md5 哈希

4

我需要解码以下数据:

b'E\x00\x00 <\xed\x00\x00>\x01\x15\xe2\xac\x140f\xa1C\xacP\x00\x00\xf8V\x00\x07\x00\x07\x00\x01\x07\x9a'

将其转换为可理解的字符串。为此,我们被告知使用hashlib和md5。但我不知道如何使用它来解密这条消息。

我尝试过类似这样的操作:

message.hashlib().md5().decode()

但是我没有得到任何结果。

4
哈希是对数据进行单向混淆和缩短的过程。例如,我可以对一个长文档进行 MD5 哈希以获得一个短字符串,用来证明该文档之后没有被更改过。但是哈希是无法反推回原始字符串的。你会发现在 MD5 对象上没有“decode”方法。 - tdelaney
那么我怎样才能使用hashlib解码数据呢?因为我被告知要使用它。 - thmasker
请澄清一下!任务还有更多内容吗?也许有可能的消息列表,你需要选择其中一个吗?你可以反向加密消息,但不能反向哈希。要么这个人不知道他们在说什么,要么任务还有更多内容。 - tdelaney
举个例子,假设我给你一条消息的前5个字符,并告诉你从那里解密整个消息。你会正确地告诉我不可能! - tdelaney
2个回答

9

你不能从这里直接到达那里。哈希是一种小的数据重构,它几乎破坏了数据中的所有信息。它用于识别数据的版本,并且以后可以用来查看数据是否已更改。一个好的哈希算法在数据中即使只有 1 个字符更改,其输出也会发生巨大变化。以古腾堡网站上《仲夏夜之梦》为例,它约有 100,000 个字符,而其md5哈希值只有 16 字节。从哈希值无法还原出原始数据!

>>> import hashlib
>>> import requests
>>> night = requests.get("http://www.gutenberg.org/ebooks/1514.txt.utf-8")
>>> len(night.text)
112127

>>> print(night.text[20000:20200])
h power to say, Behold!
The jaws of darkness do devour it up:
So quick bright things come to confusion.

HERMIA
If then true lovers have ever cross'd,
It stands as an edict in destiny:
Then let
>>> print(night.text[20000:20300])
h power to say, Behold!
The jaws of darkness do devour it up:
So quick bright things come to confusion.

HERMIA
If then true lovers have ever cross'd,
It stands as an edict in destiny:
Then let us teach our trial patience,
Because it is a customary cross;
As due to love as thoughts, and dre

>>> hash = hashlib.md5(night.text.encode("utf-8")).hexdigest()
>>> print(hash)
cce0d35b8b2c4dafcbde3deb983fec0a

哈希值可以很有用,用于检查文本是否发生了变化:
>>> hash2 = hashlib.md5(requests.get("http://www.gutenberg.org/ebooks/1514.txt.utf-8").text.encode("utf-8")).hexdigest()
>>> hash == hash2
True

3
我建议您阅读哈希库的官方文档 文档
简单示例:
import hashlib

text = 'Some text 2'

m = hashlib.md5()
m.update(b"Some text") # OR
m.update(text.encode('UTF-8'))
print(m.hexdigest())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接