2017-02-25 47 views
-7

对于学校我们有一个项目分为两部分:一个在ASP.NET(C#)和一个在Java中。 我们有一个管理员必须能够在Web应用程序和他的工具(Java)中登录。在我们的项目中,ASP.NET制作数据库非常简单。你能解密Java中ASP.NET的哈希密码吗?

但是我们必须访问管理员的密码才能让他登录我们的Java应用程序。该密码由ASP.NET散列。有谁知道如何在Java中解密它?

+2

散列是一种单向算法。你不能从哈希中获得原始文本。 Crypting是不同的。如果你有散列,你应该散列用户给出的密码,并将它与你已有的散列进行比较,而不是试图散列散列的密码。 – BackSlash

+0

散列算法是一种单向加密。您可以加密但不解密,只能与其他字符串匹配。 – Tinwor

+0

http://stackoverflow.com/q/530426/101087 – NineBerry

回答

2

NONONONONONO - 如果可以在“解密”,“dehash”的口令,那么你必须立即改变你的代码是如何工作的,使其从现在开始不可能来实现这一目标。他们被散列出来是有很好的理由的。

您需要做的是创建某种逻辑来登录某个管理员,而不使用另一个用户的密码 - 通过一些管理面板创建与常规登录相同的会话/ cookie信息。唯一知道用户密码的人必须是用户本人,而不是其他人。

+0

好的评论,但我不明白这是如何回答这个问题。 OP可能使用了错误的术语。 –

+0

@ ArtjomB。我正在考虑将它作为评论发布 - 但这是一个答案,因为我告诉他正确的方法是:创建一个管理面板 - 它不回答“我如何解密...”的问题,但它广泛地回答了潜在问题:“我如何让管理员访问......“ – luk2302

+0

我明白你的意思了,但是你提出的逻辑正是OP所要求的,我理解Java应用程序应该是管理面板的问题,这个问题在没有代码的情况下是无法解析的以了解我们正在讨论的内容 –

0

你想要什么并不是不可能的,但是你想要的真的很难,如果你选择一个好的密码,几乎不可能从哈希中获得密码,而不需要计算一段时间。所有信息如长度包含单词或密码是小写还是不能帮助您“反转”散列。

为什么大多数人会这样说是不可能的,因为哈希函数被设计为一种方式。通常用于存储密码,并且如果您可以将该过程简单地颠倒过来,那么实际上真的很糟糕,因为您可以轻松地在数据库中反转所存储的密码。

首先,您可以使用彩虹表。这是存储哈希值和有初始值的列表。 (请注意,彩虹表必须适合您的散列函数。) 如果您可以在彩虹表中找到与密码散列匹配的散列,则可以查找初始值。但彩虹表只包含常用密码的散列。如果你选择一个大的和/或复杂的密码,你需要通过所有的密码来查看这些组合的哈希值是否与密码的哈希值匹配,但是除非你为像NSA这样的机构工作,可以访问超级计算机。