是否可以解密 MD5 哈希值?

发布于 2024-08-05 05:27:43 字数 185 浏览 6 评论 0 原文

有人告诉我,他见过这样的软件系统:

  1. 从其他系统检索 MD5 加密的密码;
  2. 使用系统自己的算法解密加密的密码并将
  3. 密码存储在系统的数据库中。

这可能吗?我认为解密 MD5 哈希值是不可能/不可行的。

我知道有 MD5 字典,但是有实际的解密算法吗?

Someone told me that he has seen software systems that:

  1. retrieve MD5 encrypted passwords from other systems;
  2. decrypt the encrypted passwords and
  3. store the passwords in the database of the system using the systems own algorithm.

Is that possible? I thought that it wasn't possible / feasible to decrypt MD5 hashes.

I know there are MD5 dictionaries, but is there an actual decryption algorithm?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(24

苍暮颜 2024-08-12 05:27:43

不。MD5 不是加密(尽管它可以用作某些加密算法的一部分),它是一种单向方式 哈希函数。作为转换的一部分,许多原始数据实际上“丢失”了。

想想看:MD5 的长度始终是 128 位。这意味着有 2128 种可能的 MD5 哈希值。这是一个相当大的数字,但绝对是有限的。然而,给定的散列函数有无限多个可能的输入(其中大多数包含超过 128 位,即区区 16 个字节)。因此,数据散列到相同值的可能性实际上有无限多种。散列的有趣之处在于,找到散列到相同值的两块数据非常困难,并且意外发生的可能性几乎为 0。

一个(非常不安全的)散列函数的简单示例(以及这说明了它是单向的一般思想)是获取一段数据的所有位,并将其视为一个大数。接下来,使用一些大的(可能是素数)n 执行整数除法并取余数(请参阅:模数)。您将剩下 0 到 n 之间的某个数字。如果您使用完全相同的字符串再次执行相同的计算(任何时间、任何计算机、任何地方),它将得出相同的值。然而,没有办法找出原始值是多少,因为有无数个数字除以 n 时具有精确的余数。

也就是说,MD5 被发现有一些弱点,例如,通过一些复杂的数学运算,无需尝试 2128 可能的输入字符串就可以找到冲突。事实上,大多数密码都很短,而且人们经常使用通用值(例如“密码”或“秘密”),这意味着在某些情况下,您可以通过谷歌搜索哈希值或使用 < a href="http://en.wikipedia.org/wiki/Rainbow_table" rel="noreferrer">彩虹表。这就是为什么您应该始终“salt”散列密码的原因之一,以便两个相同的值在散列时不会散列到相同的值。

一旦一段数据通过哈希函数运行,就无法回头。

No. MD5 is not encryption (though it may be used as part of some encryption algorithms), it is a one way hash function. Much of the original data is actually "lost" as part of the transformation.

Think about this: An MD5 is always 128 bits long. That means that there are 2128 possible MD5 hashes. That is a reasonably large number, and yet it is most definitely finite. And yet, there are an infinite number of possible inputs to a given hash function (and most of them contain more than 128 bits, or a measly 16 bytes). So there are actually an infinite number of possibilities for data that would hash to the same value. The thing that makes hashes interesting is that it is incredibly difficult to find two pieces of data that hash to the same value, and the chances of it happening by accident are almost 0.

A simple example for a (very insecure) hash function (and this illustrates the general idea of it being one-way) would be to take all of the bits of a piece of data, and treat it as a large number. Next, perform integer division using some large (probably prime) number n and take the remainder (see: Modulus). You will be left with some number between 0 and n. If you were to perform the same calculation again (any time, on any computer, anywhere), using the exact same string, it will come up with the same value. And yet, there is no way to find out what the original value was, since there are an infinite number of numbers that have that exact remainder, when divided by n.

That said, MD5 has been found to have some weaknesses, such that with some complex mathematics, it may be possible to find a collision without trying out 2128 possible input strings. And the fact that most passwords are short, and people often use common values (like "password" or "secret") means that in some cases, you can make a reasonably good guess at someone's password by Googling for the hash or using a Rainbow table. That is one reason why you should always "salt" hashed passwords, so that two identical values, when hashed, will not hash to the same value.

Once a piece of data has been run through a hash function, there is no going back.

再见回来 2024-08-12 05:27:43

理论上你不能。哈希的全部意义在于它只有一种方式。这意味着,即使有人设法获取哈希列表,他们仍然无法获取您的密码。此外,这意味着即使有人在多个站点上使用相同的密码(是的,我们都知道我们不应该这样做,但是......)任何有权访问站点 A 数据库的人都将无法在站点 B。MD5

是哈希值这一事实也意味着它会丢失信息。对于任何给定的 MD5 哈希值,如果允许任意长度的密码,则可能有多个密码产生相同的哈希值。对于一个好的散列来说,在计算上不可能找到超出相当微不足道的最大长度的它们,但这意味着无法保证如果您找到具有目标散列的密码,它绝对是原始密码。您看到两个具有相同 MD5 哈希值的纯 ASCII 且长度合理的密码的可能性天文数字,但这并非不可能。

MD5 是一种不好的密码哈希:

  • 它速度很快,这意味着如果您有一个“目标”哈希,那么尝试大量密码并查看是否可以找到一个哈希到该目标的密码会很便宜。加盐对于这种情况没有帮助,但它会使尝试使用不同盐查找与任何一个多个哈希相匹配的密码的成本更高。
  • 我相信它有已知的缺陷,可以更容易地发现冲突,尽管在可打印文本(而不是任意二进制数据)中发现冲突至少会更困难。

我不是安全专家,因此除了“不要推出自己的身份验证系统”之外,不会提出具体建议。从信誉良好的供应商那里找到一个并使用它。安全系统的设计和实施都是一件棘手的事情。

You can't - in theory. The whole point of a hash is that it's one way only. This means that if someone manages to get the list of hashes, they still can't get your password. Additionally it means that even if someone uses the same password on multiple sites (yes, we all know we shouldn't, but...) anyone with access to the database of site A won't be able to use the user's password on site B.

The fact that MD5 is a hash also means it loses information. For any given MD5 hash, if you allow passwords of arbitrary length there could be multiple passwords which produce the same hash. For a good hash it would be computationally infeasible to find them beyond a pretty trivial maximum length, but it means there's no guarantee that if you find a password which has the target hash, it's definitely the original password. It's astronomically unlikely that you'd see two ASCII-only, reasonable-length passwords that have the same MD5 hash, but it's not impossible.

MD5 is a bad hash to use for passwords:

  • It's fast, which means if you have a "target" hash, it's cheap to try lots of passwords and see whether you can find one which hashes to that target. Salting doesn't help with that scenario, but it helps to make it more expensive to try to find a password matching any one of multiple hashes using different salts.
  • I believe it has known flaws which make it easier to find collisions, although finding collisions within printable text (rather than arbitrary binary data) would at least be harder.

I'm not a security expert, so won't make a concrete recommendation beyond "Don't roll your own authentication system." Find one from a reputable supplier, and use that. Both the design and implementation of security systems is a tricky business.

┾廆蒐ゝ 2024-08-12 05:27:43

从技术上讲,这是“可能的”,但需要非常严格的条件彩虹表,基于用户密码位于该哈希数据库中的极小可能性的暴力破解)。

但这并不意味着它是

  • 可行的
  • 安全

您不想“反转”MD5 哈希值。 使用下面概述的方法,您将永远不需要这样做。 “逆向”MD5 实际上被认为是恶意 - 一些网站提供了“破解”和暴力破解 MD5 哈希值的能力 - 但它们都是包含字典单词、先前提交的密码和其他单词的大型数据库。 非常小的机会会反转您需要的 MD5 哈希值。 如果您已经加盐 MD5 哈希值 - 这不会工作也可以! :)


使用 MD5 哈希登录应该的工作方式是:

注册期间:

用户创建密码->密码使用 MD5 进行哈希处理 ->存储在数据库中的哈希

登录期间:
用户输入用户名和密码-> (检查用户名)密码使用 MD5 进行哈希处理 ->哈希值与数据库中存储的哈希值进行比较

当需要“丢失密码”时:

2 个选项:

  • 用户发送随机密码进行登录,然后在首次登录时更改密码。

  • 用户收到一个更改密码的链接(如果您有安全问题/等,则需要额外检查),然后新密码将被散列并替换为数据库中的旧密码

Technically, it's 'possible', but under very strict conditions (rainbow tables, brute forcing based on the very small possibility that a user's password is in that hash database).

But that doesn't mean it's

  • Viable
    or
  • Secure

You don't want to 'reverse' an MD5 hash. Using the methods outlined below, you'll never need to. 'Reversing' MD5 is actually considered malicious - a few websites offer the ability to 'crack' and bruteforce MD5 hashes - but all they are are massive databases containing dictionary words, previously submitted passwords and other words. There is a very small chance that it will have the MD5 hash you need reversed. And if you've salted the MD5 hash - this won't work either! :)


The way logins with MD5 hashing should work is:

During Registration:

User creates password -> Password is hashed using MD5 -> Hash stored in database

During Login:
User enters username and password -> (Username checked) Password is hashed using MD5 -> Hash is compared with stored hash in database

When 'Lost Password' is needed:

2 options:

  • User sent a random password to log in, then is bugged to change it on first login.

or

  • User is sent a link to change their password (with extra checking if you have a security question/etc) and then the new password is hashed and replaced with old password in database
掀纱窥君容 2024-08-12 05:27:43

不直接。由于鸽子洞原理,(可能)有多个值可以哈希到任何给定的 MD5输出。因此,您无法确定地逆转它。此外,MD5 的设计目的是为了让人们很难找到任何这样的反向哈希值(但是,已经有一些攻击产生了冲突 - 也就是说,生成两个散列到相同结果的值,但您无法控制生成的 MD5 值是什么)。

但是,如果将搜索空间限制为长度小于 N 的常见密码,则可能不再具有不可逆性(因为 MD5 输出的数量远大于感兴趣域中的字符串数量)。然后您可以使用 rainbow 表 或类似的反向哈希。

Not directly. Because of the pigeonhole principle, there is (likely) more than one value that hashes to any given MD5 output. As such, you can't reverse it with certainty. Moreover, MD5 is made to make it difficult to find any such reversed hash (however there have been attacks that produce collisions - that is, produce two values that hash to the same result, but you can't control what the resulting MD5 value will be).

However, if you restrict the search space to, for example, common passwords with length under N, you might no longer have the irreversibility property (because the number of MD5 outputs is much greater than the number of strings in the domain of interest). Then you can use a rainbow table or similar to reverse hashes.

允世 2024-08-12 05:27:43

不可能,至少在合理的时间内不可能。

通常处理这种情况的方法是“重置”密码。也就是说,您给他们一个新的(随机)密码并通过电子邮件发送给他们。

Not possible, at least not in a reasonable amount of time.

The way this is often handled is a password "reset". That is, you give them a new (random) password and send them that in an email.

趁微风不噪 2024-08-12 05:27:43

您无法恢复 md5 密码。(以任何语言)

但是您可以:

为用户提供一个新密码。

检查一些彩虹表,也许可以找回旧的。

You can't revert a md5 password.(in any language)

But you can:

give to the user a new one.

check in some rainbow table to maybe retrieve the old one.

执妄 2024-08-12 05:27:43

不,他肯定对 MD5 字典感到困惑。

加密哈希(MD5 等...)是单向,您无法仅通过摘要返回原始消息除非您有有关该消息的其他信息原始消息等,您不应该这样做。

No, he must have been confused about the MD5 dictionaries.

Cryptographic hashes (MD5, etc...) are one way and you can't get back to the original message with only the digest unless you have some other information about the original message, etc. that you shouldn't.

梦巷 2024-08-12 05:27:43

解密(以算法方式直接从哈希值中获取纯文本),否。

然而,有一些方法使用所谓的彩虹表。如果你的密码是在没有盐的情况下进行哈希处理的,那么这是非常可行的。

Decryption (directly getting the the plain text from the hashed value, in an algorithmic way), no.

There are, however, methods that use what is known as a rainbow table. It is pretty feasible if your passwords are hashed without a salt.

看轻我的陪伴 2024-08-12 05:27:43

MD5是一种散列算法,无法恢复散列值。

您应该添加“更改密码功能”,用户提供另一个密码,计算哈希值并将其存储为新密码。

MD5 is a hashing algorithm, you can not revert the hash value.

You should add "change password feature", where the user gives another password, calculates the hash and store it as a new password.

紫﹏色ふ单纯 2024-08-12 05:27:43

没有简单的方法可以做到这一点。这就是首先对密码进行哈希处理的目的。 :)

应该能够做的一件事是手动为他们设置临时密码并将其发送给他们。

我犹豫是否要提及这一点,因为这是一个坏主意(并且无论如何都不能保证它有效),但是您可以尝试在彩虹表中查找哈希,例如 milw0rm 看看是否可以通过这种方式恢复旧密码。

There's no easy way to do it. This is kind of the point of hashing the password in the first place. :)

One thing you should be able to do is set a temporary password for them manually and send them that.

I hesitate to mention this because it's a bad idea (and it's not guaranteed to work anyway), but you could try looking up the hash in a rainbow table like milw0rm to see if you can recover the old password that way.

分分钟 2024-08-12 05:27:43

请参阅此处的所有其他答案,了解它如何以及为什么不可逆以及为什么您无论如何都不想这样做。

为了完整起见,您可以在rainbow 表中查找可能的匹配项。不能保证彩虹表中的答案将是您的用户选择的原始密码,因此这会让他们感到非常困惑。

此外,这不适用于加盐哈希。 加盐是许多安全专家推荐的。

See all other answers here about how and why it's not reversible and why you wouldn't want to anyway.

For completeness though, there are rainbow tables which you can look up possible matches on. There is no guarantee that the answer in the rainbow table will be the original password chosen by your user so that would confuse them greatly.

Also, this will not work for salted hashes. Salting is recommended by many security experts.

怀里藏娇 2024-08-12 05:27:43

不,不可能反转 MD5 等哈希函数:给定输出哈希值,除非已知有关输入消息的足够信息,否则不可能找到输入消息。

解密不是为哈希函数定义的函数;加密和解密是密码的功能,例如 CBC 模式下的 AES;哈希函数既不加密,也不解密哈希函数用于消化输入消息。顾名思义,设计上不可能存在反向算法。


MD5 被设计为一种加密安全的单向哈希函数。现在很容易生成 MD5 冲突 - 即使输入消息的很大一部分是预先确定的。因此,MD5 已正式被破解,MD5 不应再被视为加密安全哈希。然而,仍然不可能找到导致哈希值的输入消息:当仅知道 H(X) 时找到 X(并且 X 不具有包含至少一个 128 字节预计算数据块的预计算结构) 。 没有已知的针对 MD5 的原像攻击

通常也可以使用暴力或(增强)字典攻击来猜测密码,比较数据库或尝试在所谓的彩虹表中查找密码哈希值。如果找到匹配,则在计算上可以确定已找到输入。哈希函数还可以抵御冲突攻击:在给定 H(X) 的情况下查找 X',使得 H(X') = H(X) 。因此,如果找到 X,则可以通过计算确定它确实是输入消息。否则你毕竟会执行碰撞攻击。彩虹表可用于加速攻击,并且有专门的互联网资源可以帮助您找到给定特定哈希值的密码。

当然可以重新使用哈希值H(X)来验证在其他系统上生成的密码。接收系统唯一要做的就是存储以 H(X) 作为输入的确定性函数 F 的结果。当向系统提供X时,可以重新计算H(X)以及F并且可以比较结果。换句话说,不需要解密哈希值来验证密码是否正确,并且您仍然可以将哈希存储为不同的值。


重要的是使用密码哈希或 PBKDF(基于密码的密钥派生函数)来代替 MD5。这样的函数指定如何将与哈希值一起使用。这样,就不会为相同的密码(来自其他用户或其他数据库内)生成相同的哈希值。由于这个原因,只要盐足够大并且正确随机化,密码哈希也不允许使用彩虹表。

密码哈希还包含一个工作因素(有时使用迭代计数进行配置),可以显着减缓尝试在给定盐和哈希值的情况下查找密码的攻击。这很重要,因为包含盐和哈希值的数据库可能会被盗。最后,密码哈希也可能是内存困难,因此需要大量内存来计算哈希。这使得攻击者无法使用特殊硬件(GPU、ASIC、FPGA 等)来加速搜索。其他输入或配置选项(例如胡椒或并行化量)也可用于密码散列。

然而,即使 H(X) 是密码哈希,它仍然允许任何人验证给定的 H(X) 密码。密码哈希仍然是确定性的,因此如果有人知道所有输入和哈希算法本身,则可以使用 X 来计算 H(X) 并再次计算结果可以比较。

常用的密码哈希有bcryptscryptPBKDF2。还有各种形式的Argon2,它是最近密码散列竞赛的获胜者。 CrackStation 上的这里是一篇关于正确保护密码安全的好博客文章。


有可能使对手无法执行哈希计算来验证密码是否正确。为此,可以使用胡椒作为密码哈希的输入。或者,当然可以使用诸如AES之类的密码和诸如CBC或GCM之类的操作模式来对哈希值进行加密。然而,这需要独立存储秘密/密钥,并且具有比密码散列更高的访问要求。

No, it is not possible to reverse a hash function such as MD5: given the output hash value it is impossible to find the input message unless enough information about the input message is known.

Decryption is not a function that is defined for a hash function; encryption and decryption are functions of a cipher such as AES in CBC mode; hash functions do not encrypt nor decrypt. Hash functions are used to digest an input message. As the name implies there is no reverse algorithm possible by design.


MD5 has been designed as a cryptographically secure, one-way hash function. It is now easy to generate collisions for MD5 - even if a large part of the input message is pre-determined. So MD5 is officially broken and MD5 should not be considered a cryptographically secure hash anymore. It is however still impossible to find an input message that leads to a hash value: find X when only H(X) is known (and X doesn't have a pre-computed structure with at least one 128 byte block of precomputed data). There are no known pre-image attacks against MD5.

It is generally also possible to guess passwords using brute force or (augmented) dictionary attacks, to compare databases or to try and find password hashes in so called rainbow tables. If a match is found then it is computationally certain that the input has been found. Hash functions are also secure against collision attacks: finding X' so that H(X') = H(X) given H(X). So if an X is found it is computationally certain that it was indeed the input message. Otherwise you would have performed a collision attack after all. Rainbow tables can be used to speed up the attacks and there are specialized internet resources out there that will help you find a password given a specific hash.

It is of course possible to re-use the hash value H(X) to verify passwords that were generated on other systems. The only thing that the receiving system has to do is to store the result of a deterministic function F that takes H(X) as input. When X is given to the system then H(X) and therefore F can be recalculated and the results can be compared. In other words, it is not required to decrypt the hash value to just verify that a password is correct, and you can still store the hash as a different value.


Instead of MD5 it is important to use a password hash or PBKDF (password based key derivation function) instead. Such a function specifies how to use a salt together with a hash. That way identical hashes won't be generated for identical passwords (from other users or within other databases). Password hashes for that reason also do not allow rainbow tables to be used as long as the salt is large enough and properly randomized.

Password hashes also contain a work factor (sometimes configured using an iteration count) that can significantly slow down attacks that try to find the password given the salt and hash value. This is important as the database with salts and hash values could be stolen. Finally, the password hash may also be memory-hard so that a significant amount of memory is required to calculate the hash. This makes it impossible to use special hardware (GPU's, ASIC's, FPGA's etc.) to allow an attacker to speed up the search. Other inputs or configuration options such as a pepper or the amount of parallelization may also be available to a password hash.

It will however still allow anybody to verify a password given H(X) even if H(X) is a password hash. Password hashes are still deterministic, so if anybody has knows all the input and the hash algorithm itself then X can be used to calculate H(X) and - again - the results can be compared.

Commonly used password hashes are bcrypt, scrypt and PBKDF2. There is also Argon2 in various forms which is the winner of the reasonably recent password hashing competition. Here on CrackStation is a good blog post on doing password security right.


It is possible to make it impossible for adversaries to perform the hash calculation verify that a password is correct. For this a pepper can be used as input to the password hash. Alternatively, the hash value can of course be encrypted using a cipher such as AES and a mode of operation such as CBC or GCM. This however requires the storage of a secret / key independently and with higher access requirements than the password hash.

信愁 2024-08-12 05:27:43

MD5 被认为是损坏的,不是因为您可以从哈希中取回原始内容,而是因为通过工作,您可以制作两条哈希为相同哈希的消息。

您无法取消 MD5 哈希值的哈希值。

MD5 is considered broken, not because you can get back the original content from the hash, but because with work, you can craft two messages that hash to the same hash.

You cannot un-hash an MD5 hash.

盛夏尉蓝 2024-08-12 05:27:43

就找到哈希函数的逆函数而言,没有办法“恢复”它。如前所述,这就是哈希函数的全部意义所在。它不应该是可逆的,并且应该允许快速哈希值计算。因此,找到产生给定哈希值的输入字符串的唯一方法是尝试所有可能的组合。因此,这被称为暴力攻击。

尝试所有可能的组合需要花费大量时间,这也是使用哈希值以相对安全的方式存储密码的原因。如果攻击者能够访问您的数据库并包含所有用户密码,那么您无论如何都会失败。如果您拥有哈希值和(理想地讲)强密码,那么攻击者从哈希值中获取密码将会困难得多。

存储哈希值也不存在性能问题,因为计算哈希值相对较快。因此,大多数系统所做的就是计算用户键入的密码的哈希值(速度很快),然后将其与用户数据库中存储的哈希值进行比较。

There is no way of "reverting" a hash function in terms of finding the inverse function for it. As mentioned before, this is the whole point of having a hash function. It should not be reversible and it should allow for fast hash value calculation. So the only way to find an input string which yields a given hash value is to try out all possible combinations. This is called brute force attack for that reason.

Trying all possible combinations takes a lot of time and this is also the reason why hash values are used to store passwords in a relatively safe way. If an attacker is able to access your database with all the user passwords inside, you loose in any case. If you have hash values and (idealistically speaking) strong passwords, it will be a lot harder to get the passwords out of the hash values for the attacker.

Storing the hash values is also no performance problem because computing the hash value is relatively fast. So what most systems do is computing the hash value of the password the user keyed in (which is fast) and then compare it to the stored hash value in their user database.

╄→承喏 2024-08-12 05:27:43

您可以找到使用字典来检索原始消息的在线工具。

在某些情况下,字典方法可能毫无用处:

  • 如果使用 SALT 消息对消息进行哈希处理
  • 如果消息多次进行哈希处理

例如,这是一个 MD5 解密器在线工具。

You can find online tools that use a dictionary to retrieve the original message.

In some cases, the dictionary method might just be useless:

  • if the message is hashed using a SALT message
  • if the message is hash more than once

For example, here is one MD5 decrypter online tool.

才能让你更想念 2024-08-12 05:27:43

唯一可以工作的是(如果我们提到密码只是散列,没有添加任何类型的盐来防止重放攻击,如果是这样你必须知道盐)顺便说一句,获取一个字典攻击工具,许多单词,数字等的文件,然后创建两行,一行是单词,数字(在字典中),另一行是单词的哈希值,如果匹配则比较哈希值...

这是唯一的方法,无需进入密码分析。

The only thing that can be work is (if we mention that the passwords are just hashed, without adding any kind of salt to prevent the replay attacks, if it is so you must know the salt)by the way, get an dictionary attack tool, the files of many words, numbers etc. then create two rows, one row is word,number (in dictionary) the other one is hash of the word, and compare the hashes if matches you get it...

that's the only way, without going into cryptanalysis.

凉薄对峙 2024-08-12 05:27:43

MD5哈希算法是不可逆的,所以MD5解码是不可能的,但是有些网站有批量的密码匹配集,所以你可以尝试在线解码MD5哈希。

在线尝试:

MD5解密

md5online

md5decrypter

The MD5 Hash algorithm is not reversible, so MD5 decode in not possible, but some website have bulk set of password match, so you can try online for decode MD5 hash.

Try online :

MD5 Decrypt

md5online

md5decrypter

谈情不如逗狗 2024-08-12 05:27:43

是的,您所要求的正是可能的。
在没有帮助的情况下不可能“解密”MD5 密码,但可以将 MD5 密码重新加密为另一种算法,只是不是一次性完成。

您要做的就是安排您的用户能够使用旧的 MD5 密码登录到您的新系统。当他们登录时,他们会向您的登录程序提供一个未哈希版本的密码,您可以证明该密码与您拥有的 MD5 哈希值相匹配。然后,您可以将此未哈希的密码转换为新的哈希算法。

显然,这是一个扩展的过程,因为您必须等待用户告诉您密码是什么,但它确实有效。

(注意:七年后,希望有人会发现它有用)

Yes, exactly what you're asking for is possible.
It is not possible to 'decrypt' an MD5 password without help, but it is possible to re-encrypt an MD5 password into another algorithm, just not all in one go.

What you do is arrange for your users to be able to logon to your new system using the old MD5 password. At the point that they login they have given your login program an unhashed version of the password that you prove matches the MD5 hash that you have. You can then convert this unhashed password to your new hashing algorithm.

Obviously, this is an extended process because you have to wait for your users to tell you what the passwords are, but it does work.

(NB: seven years later, oh well hopefully someone will find it useful)

墨离汐 2024-08-12 05:27:43

不,这是不可能的。您可以使用字典,也可以尝试对不同的值进行哈希处理,直到获得所需的哈希值。但它无法被“解密”。

No, it cannot be done. Either you can use a dictionary, or you can try hashing different values until you get the hash that you are seeking. But it cannot be "decrypted".

冷心人i 2024-08-12 05:27:43

MD5 有其缺点(请参阅 Wikipedia),因此有一些项目尝试预先计算哈希值。维基百科也暗示了其中一些项目。我认识(并且尊敬)的一个是ophrack。您不能告诉用户他们自己的密码,但您也许可以告诉他们一个有效的密码。但我认为:只需向他们邮寄一个新密码,以防他们忘记。

MD5 has its weaknesses (see Wikipedia), so there are some projects, which try to precompute Hashes. Wikipedia does also hint at some of these projects. One I know of (and respect) is ophrack. You can not tell the user their own password, but you might be able to tell them a password that works. But i think: Just mail thrm a new password in case they forgot.

故事还在继续 2024-08-12 05:27:43

理论上不可能解密哈希值,但是您可以使用一些肮脏的技术来恢复原始的纯文本。

  1. 暴力破解:所有计算机安全算法都会遭受暴力破解< /a>.基于这一思想,今天的 GPU 采用并行编程的思想,通过使用任何图形处理器对纯文本进行大规模暴力破解,它可以取回纯文本。这个工具 hashcat 可以完成这项工作。上次我检查它的 cuda 版本时,我能够暴力破解 7 个字母长的字符六分钟内。
  2. 互联网搜索:只需在 Google 上复制并粘贴哈希值,然后查看是否可以在那里找到相应的纯文本。当您进行渗透测试时,这不是一个解决方案,但绝对值得一试。一些网站维护字典中几乎所有单词的哈希值。

In theory it is not possible to decrypt a hash value but you have some dirty techniques for getting the original plain text back.

  1. Bruteforcing: All computer security algorithm suffer bruteforcing. Based on this idea today's GPU employ the idea of parallel programming using which it can get back the plain text by massively bruteforcing it using any graphics processor. This tool hashcat does this job. Last time I checked the cuda version of it, I was able to bruteforce a 7 letter long character within six minutes.
  2. Internet search: Just copy and paste the hash on Google and see If you can find the corresponding plaintext there. This is not a solution when you are pentesting something but it is definitely worth a try. Some websites maintain the hash for almost all the words in the dictionary.
念三年u 2024-08-12 05:27:43

MD5 是一种加密(单向)哈希函数,因此没有直接的方法对其进行解码。加密哈希函数的全部目的是您无法撤消它。

您可以做的一件事是采用强力策略,您猜测哈希了什么,然后使用相同的函数对其进行哈希并查看它是否匹配。除非散列数据很容易猜测,否则可能需要很长时间。

MD5 is a cryptographic (one-way) hash function, so there is no direct way to decode it. The entire purpose of a cryptographic hash function is that you can't undo it.

One thing you can do is a brute-force strategy, where you guess what was hashed, then hash it with the same function and see if it matches. Unless the hashed data is very easy to guess, it could take a long time though.

南薇 2024-08-12 05:27:43

目前还不可能将密码的哈希值放入算法中并以纯文本形式获取密码,因为哈希值是一种单向的事情。但人们所做的是生成哈希值并将其存储在一个大表中,以便当您输入特定哈希值时,它会检查表中是否有与该哈希值匹配的密码,并将该密码返回给您。执行此操作的网站示例是 http://www.md5online.org/ 。现代密码存储系统通过使用加盐算法来解决这个问题,这样当您在注册期间将相同的密码输入密码框中时,就会生成不同的哈希值。

It is not yet possible to put in a hash of a password into an algorithm and get the password back in plain text because hashing is a one way thing. But what people have done is to generate hashes and store it in a big table so that when you enter a particular hash, it checks the table for the password that matches the hash and returns that password to you. An example of a site that does that is http://www.md5online.org/ . Modern password storage system counters this by using a salting algorithm such that when you enter the same password into a password box during registration different hashes are generated.

七七 2024-08-12 05:27:43

不,您无法解密/反转 md5,因为它是一种单向哈希函数,除非您找不到 MD5 中的广泛漏洞。
另一种方法是有些网站拥有大量的密码数据库,因此您可以尝试在线解码您的 MD5 或 SHA1 哈希字符串。
我尝试了一个网站,例如http://www.mycodemyway.com/encrypt-and-decrypt/md5 它对我来说工作正常,但这完全取决于如果该哈希存储在该数据库中,那么您可以获得实际的字符串。

No, you can not decrypt/reverse the md5 as it is a one-way hash function till you can not found a extensive vulnerabilities in the MD5.
Another way is there are some website has a large amount of set of password database, so you can try online to decode your MD5 or SHA1 hash string.
I tried a website like http://www.mycodemyway.com/encrypt-and-decrypt/md5 and its working fine for me but this totally depends on your hash if that hash is stored in that database then you can get the actual string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文