我正在使用数据库,其中我插入数据库中的一些加密数据必须被解密才能显示给用户。是否可以将数据库中的解密消息/ varchar条目转换为其Orginal或String形式?让我说我有这个哈希消息
`abc = `'7meXQAMRb+ERvBj6Dy/SEe6ldukGy6bTKugnCsoYyl+lYNT6';
无论如何都要将7meXQAMRb+ERvBj6Dy/SEe6ldukGy6bTKugnCsoYyl+lYNT6
再次送回abc?
顺便说一句,我使用Omu Encrypto来加密我的密码
答案 0 :(得分:2)
不,您无法解密已经散列的数据。
这是散列信息的全部要点;在大多数情况下,这是一个单向过程。
你可以使用所谓的彩虹攻击来强制一些输入,看看哈希是否匹配,但说实话,这需要很长时间,可能不是你想要的。
有关详细信息,请参阅Eric J的答案。
答案 1 :(得分:1)
无法将散列密码可靠地反转到原始字符串中。但是,可以重建产生给定散列的某些有效输入。我提供这个答案是因为其他答案只是部分正确,因此了解哈希的相对安全性非常重要。
要理解这一点,假设您使用1位散列算法(即散列是1或0)。您散列的所有字符串中有一半将产生“1”。将其扩展为2位散列,随机散列的1-in-4字符串将产生给定的散列值(哈希值为0,1,2或3 ...在二进制00,01,10,11中)。将其扩展为128位,虽然hash collisions FAR不太常见,但它们仍然存在。如果你的哈希算法有已知的漏洞,那么在计算上可以直接击败它。
例如,可以使用Rainbow Tables攻击MD5。有一些在线服务提供散列“破解”,例如http://md5crack.com/。这里,破解意味着重建产生散列的一些有效输入。即使是强力破解也具有现代处理能力,特别是使用基于GPU的方法和/或分布式计算。哈希是一个很好的工具,但请注意您的安全要求以及将您选择的哈希算法生成的哈希反转为产生该哈希的某个有效输入的相对容易性。此外,请始终确保并使用哈希值使用salt值。
<强>更新强>
既然问题已经重写了,我会推荐你使用AES加密。参见
答案 2 :(得分:0)
哈希是单向的,但是如果你使用像你所说的第三方加密方法,他们也应该提供解密方法。