2011-10-12 2435 views
8

是否可以解密某些先前使用Java中的SHA-1算法加密的字符串?如何在Java中解密sha1加密的字符串

+2

SHA-1是一个散列,而不是一个加密算法。如果你试图从它的SHA-1哈希中提取一个字符串,祝你好运。这就是所谓的图像前攻击。 – Mysticial

+1

它是_possible_,但需要计算资源和时间,因为sha1加密的数据一旦加密就不会被解密。 – jsvk

+0

我认为这个问题应该是解密sha1的计算密集程度。 Java与它有什么关系?如果你有一个好的算法,你可以使用任何语言来编写它。 –

回答

12

SHA1是cryptographic hash function,整个问题是您无法撤消它。如果可以颠倒散列(找到给定散列的输入),它就没用了。如果您需要加密某些内容并稍后将其解密,则应使用encryption function,如AESRSA

但是,对于非常简单的输入,可以通过猜测输入是什么并检查散列是否相同来输入crack the hash function

例Python代码:

def crack_hash(hash_to_crack, hash_function, list_of_guesses): 
    # Try to hash everything in our guess list 
    for guess in list_of_guesses: 
     new_hash = hash_function(guess) 
     # if the hashes match, we found it 
     if new_hash == hash_to_crack: 
      return guess 
    # If none of them match, give up 
    return None 

当然,如果你真的想破解高效散列,使用软件一样John the RipperHashcat可能是你最好的选择。请注意,这通常适用于密码,因为它们很短并且容易猜到,但随着输入的增加,难度将呈指数级增长。您可以在几分钟内破解每个带有6个字符输入的SHA-1哈希,而使用16个字符破解一个平均需要数万亿年。

+0

这种方法需要大量的空间和时间以及合理大小的列表。更实际的选择是利用[彩虹表](http://en.wikipedia.org/wiki/Rainbow_table)来应用时间记忆折衷。这种方法对于盐渍散列没用,尽管 – jsvk

+0

@jsvk--我不是说这是个好主意。事实上,我希望这个例子能说明这是多么毫无意义,除非你有一个好主意来猜测。它可以得到改进,但实际上,没有人使用他们自己的密码破解程序 - 当然不是用Python编写的;) –

2

不,这是不可能的,因为SHA-1是一个散列 - 它是单向票证。如果你想隐藏和解密一个字符串,那么你需要使用一些使用密钥来生成加密数据的加密算法。然后你可以加密数据,并在成功解密之后。例如AES。你可以从here

2

阅读关于AES的简短回答:这是不可能的。

由于SHA-1是一个cryptographic hash function,根据鸽巢原理,在数学上不可能逆转。只有2 可能的SHA-1散列。由于有无限数量的可能输入字符串,因此必须有冲突(多个输入散列为相同的值)。一般来说,您无法知道哪些字符串是原始输入。

但是,真实世界的字符串并不完全是任意的。如果您知道一些关于您的输入字符串的信息(例如,它的长度小于5个字符),则很有可能输入是唯一的。不幸的是,像SHA-1这样的散列函数有意在计算上不可逆转。 (对SHA-1有理论上的攻击,但我认为目前还没有任何可行的解决方案。)

所以如果你需要恢复散列数据,你必须使用暴力破解:尝试使用SHA-1ing字符串长度小于n,并查看散列是否匹配。但是,成倍增长的字符串长度高达n,所以这很快就变得不可行。

有一种可能的方法来在宇宙结束之前恢复散列数据。你唯一的希望是使用更复杂的方法,如rainbow tables。这将只有工作,如果你知道你的原始字符串很短(少于15个字符)。即使对于短字符串,也需要很长时间(和千兆字节的磁盘空间)来预先计算表。

+0

请更新:这很可能,我只需要算法。 [sha1解密器](http://www.stringfunction.com/sha1-decrypter.html)是链接到您可以找到在线解密器页面的链接 –

+2

@VineetVerma:这不是解密器;这是一个反向查找。它使用的代码本质上是:Map lookup = new HashMap ();/*添加一些常用输入* /;返回lookup.get(sha1sum);'。只有当他们碰巧将你正在寻找的输入添加到地图上时,它才会起作用。 –