【问题标题】:decrypt hashing password [closed]解密哈希密码[关闭]
【发布时间】:2013-01-11 17:04:33
【问题描述】:

我有以下代码来加密密码,但是当我尝试对其进行解码时,我没有得到预期的结果,这里是代码。

BASE64Encoder encoder = new BASE64Encoder();
String afterhex=toSHA1("mypassword".getBytes());
String encodedBytes = encoder.encodeBuffer(afterhex.getBytes());

public static String toSHA1(byte[] convertme) {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA-1");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return new String(md.digest(convertme));
}

例如,如果你尝试编码,jill 你应该得到LQBIF2TS0FSDYtGjaNmC2gl/klw=

任何恢复它的建议:)

【问题讨论】:

  • 你不解密哈希。
  • 散列!= 加密!
  • 无法回答,因为您无法解密哈希。
  • SHA-1 不安全。你应该使用 bcrypt 或 PBKDFv2。
  • 哈希是破解而不是“解密”,它们是使用 John The Ripper、彩虹表甚至在线免费服务等软件破解的。

标签: java security passwords password-protection password-encryption


【解决方案1】:

哈希算法不是加密/解密算法。

散列是一种将可变长度的大型数据集(例如消息)映射到固定长度(散列)的较小数据集的单向过程。长度取决于散列算法。

并且不可能执行从哈希返回到您的消息的反向操作。

即使有可能找到生成相同哈希的消息(例如使用rainbow tables;对于MD5 等较弱的哈希算法更容易),您永远不知道 如果消息与用于生成哈希的原始消息相同。防止发现(猜测)消息(密码)生成相同哈希值的方法之一是在对消息(密码)进行哈希处理时使用salt

编辑

我还会推荐任何 Bruce Schneier 书籍,例如“密码学工程:设计原理和实际应用”(以一种非常好的易懂方式编写)将详细描述密码学和散列。

【讨论】:

  • +1 得到很好的答案。然而,它们可以通过使用彩虹表或暴力攻击来破解。
  • @smit 我认为cracked这个词被滥用了,发现碰撞更正确。
  • @Woot4Moo 无法想到具体的词。 ;-}
  • @smit,是的,你是对的。散列在密码学上并不强,并且有许多方法可以从给定的散列生成消息。但是,我的意思是明确指出您不能从哈希中“解密”。
  • @Tom 我认为在密码学世界中没有什么是安全的。总有办法突破它们。他们只能改进它。
猜你喜欢
  • 2013-05-14
  • 2016-02-06
  • 2020-11-13
  • 2010-12-08
  • 1970-01-01
  • 2014-07-12
  • 2023-04-08
  • 2012-07-07
  • 1970-01-01
相关资源
最近更新 更多