python中有md5解密函数吗?

python中有md5解密函数吗?,python,md5,Python,Md5,可能重复: 我使用了md5.new()md5.update(“aaa”),md5.digest() 形成数据的md5散列“aaa”。如何使用python获取数据?您无法解码md5哈希,因为哈希是一个最好被认为是(也就是说,散列的内容不能被反散列;只能通过检查已知散列的列表,或者通过散列一组输入并将结果散列与您试图“解码”的散列相匹配来确定散列的内容) 引用维基百科的话,这种散列算法的主要特点是: 找不到消息 它有一个给定的散列 是的 在没有消息的情况下修改消息是不可行的 更改其散列 这是不可能

可能重复:

我使用了
md5.new()
md5.update(“aaa”)
md5.digest()


形成数据的md5散列
“aaa”
。如何使用python获取数据?

您无法解码md5哈希,因为哈希是一个最好被认为是(也就是说,散列的内容不能被反散列;只能通过检查已知散列的列表,或者通过散列一组输入并将结果散列与您试图“解码”的散列相匹配来确定散列的内容)

引用维基百科的话,这种散列算法的主要特点是:

找不到消息 它有一个给定的散列

是的 在没有消息的情况下修改消息是不可行的 更改其散列

这是不可能的 使用查找两条不同的消息 同样的杂凑

如今,此类算法最常见的用途是:

  • 存储密码
  • 验证文件的内容

如果您想对数据进行双向加密,您需要查看其他Python加密库(通常,Stackoverflow有一个加密库)。

您不能。这就是问题所在-哈希是单向的,它与加密不同。

一般来说,BlueRaja和Sean的答案是正确的。MD5(和其他哈希函数)如果是单向的,则无法逆转该过程


但是,如果数据量很小,可以尝试搜索具有相同哈希的哈希冲突(另一个或相同的数据块)。

我不知道Python,但哈希函数是不可逆的。 首先,请注意散列函数提供了一个恒定长度的输出,这意味着信息将被丢弃(您可以散列一个3MB的文件,但仍然只能得到小于1KB的结果)。
此外,散列函数是因为它们是不可逆的,如果需要加密,不要使用散列而是加密-散列的一个主要应用是当数据库信息泄漏(其中包含散列)时,密码没有被泄露(有更多的例子,但这是最明显的一个)

如果你想破坏一个散列,比如密码散列。那么你需要一个非常大的查找表。通常使用字典来破坏密码,这是一个非常好的方法,特别是如果它是一个咸密码散列

另一种方法是使用,但是这些需要很长时间才能生成


是执行md5()的python脚本暴力攻击。

为了补充其他人的观点,MD5是一种单向散列。常见用法是对两个输入值进行散列,如果散列值匹配,则输入应相同。从MD5散列值到散列输入是毫无意义的。您可能想要的是一个-见,以获得关于该主题的良好讨论。

散列将一组数据映射到一组有限(尽管很大)的数值/字符串


这是一个多对一映射,因此解码散列不仅在密码学意义上是“困难的”,而且在概念上也是不可能的,因为即使可以,也会得到无限多个可能的输入字符串。

不,在python或任何其他编程语言中,D5()都不是“加密”函数。没有反向,如果有,则不能用于密码。数据->哈希=牛排->hamburger@PaulSasik:更像是Cow->Steak,尝试反向操作;)碰撞搜索非常耗时,我想你的意思是字典攻击。是的,使用字典攻击查找冲突的数据位会快得多(但最终,这是散列中的冲突)。这仅适用于加密散列函数。纯数学散列函数没有继承大小散列(n)=n%101,即使存在与大多数实现关联的类型大小。这是将值映射到数组索引的常用方法,即使它是不可逆的(除非您知道n“md5是单向散列”这句话并没有错,但它错误地暗示了存在双向散列…@Jasper-MD5是一个单向散列函数,这使它成为加密散列函数的候选函数,而你是对的,双向加密散列函数完全是胡说八道。我想我应该这么说“MD5是一个加密散列函数,因此它本质上是不可逆的”。@Jasper:我看到你的pendantry调用,并向你提出:完美散列。所有合法的输入映射到一个不同的输出,因此可以反转,双向散列函数也是如此。如果它不是要“解码”,那么“编码”是一个相当糟糕的词语选择。为什么传统的“单向散列”不行?@tΖΖΖΖΖΖΥ:因为单向编码/加密是一个用词不当的词,只有那些不完全确定自己在说什么的人才会使用。密码散列每天都会被破解。我看到它是这样说的:散列函数就像制作肉糜:你不能把它变成牛。“散列不一定是单向的,但MD5肯定是。”如果发生冲突,使得任何两个不同的输入都有相同的结果,则散列只能是单向的。@Nathan:这根本没有意义。请详细说明为什么它没有意义?如果从数学角度看,散列仅仅是一个函数
h(x)=y
其中
h
是散列函数,
x
是输入,
y
是输出。如果存在
x
z
这两种
h(x)=y
h(z)=y
假设
x!=z
,则散列只是单向的。假设
h(x)
只是一个标识(假设
x
是一个整数或字符类型),甚至只是一个简单的旋转。这是完全可逆的,因此不是单向的。@Nathan:你把的数学定义和的计算定义混淆了。如果我们使用你的定义,每个函数都有固定大小的输出