如何解密SHA-256加密字符串?

chi*_*one 47 java hash cryptography

我有一个使用以下方法编码的字符串,有没有办法将此字符串解码回原始值?谢谢.

public synchronized String encode(String password)
        throws NoSuchAlgorithmException, IOException {

    String encodedPassword = null;
    byte[] salt = base64ToByte(saltChars);

    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    digest.reset();
    digest.update(salt);

    byte[] btPass = digest.digest(password.getBytes("UTF-8"));
    for (int i = 0; i < ITERATION_COUNT; i++) {
        digest.reset();
        btPass = digest.digest(btPass);
    }

    encodedPassword = byteToBase64(btPass);     
    return encodedPassword;
}

private byte[] base64ToByte(String str) throws IOException {

    BASE64Decoder decoder = new BASE64Decoder();
    byte[] returnbyteArray = decoder.decodeBuffer(str);

    return returnbyteArray;
}

private String byteToBase64(byte[] bt) {

    BASE64Encoder endecoder = new BASE64Encoder();
    String returnString = endecoder.encode(bt);

    return returnString;
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 123

SHA-256是一种加密(单向)哈希函数,因此没有直接的解码方法.加密哈希函数的全部目的是您无法撤消它.

你可以做的一件事是一个蛮力策略,你猜测什么是哈希值,然后用相同的函数哈希它,看它是否匹配.除非散列数据非常容易猜测,否则可能需要很长时间.

您可能会发现问题" 散列密码和加密密码之间的区别 "这个问题有趣.

  • 换句话说,如果你可以轻松地反转这个功能,那将是一件非常糟糕的事情. (17认同)
  • @Safeer 他们有一个哈希函数的输出列表,然后查找输入是什么。他们实际上并不是在解密;而是在解密。他们本质上是猜测,然后跟踪结果。 (2认同)

Baa*_*eos 31

应该注意 - Sha256不会加密字符串的数据/内容,而是使用输入字符串作为种子生成固定大小的哈希值.

在这种情况下 - 我可以提供一个百科全书的内容,这将是文本大小100 mb,但结果字符串仍然是256位大小.

你不可能反转哈希,从固定大小的哈希中取出100mb的数据,你可以做的最好的,就是尝试猜测/计算种子数据,哈希,然后查看哈希是否匹配哈希你试图打破.

如果你可以反转哈希,那么你将拥有迄今为止最好的压缩形式.

  • “如果你能反转哈希值,你将获得迄今为止最有效的压缩形式。” 不,不是真的。“反转哈希函数”指的是发现冲突。没有人真正关心找到确切的原始输入。所以你反转哈希函数只会给你一个乱码生成器。 (2认同)

pai*_*ego 10

SHA* 是一种哈希函数。它创建原始数据的表示(哈希)。此哈希决不会用于重新创建原始数据。因此这不是加密。相反,可以在同一原始数据的两个不同位置使用相同的哈希函数,以查看是否生成相同的哈希值。该方法常用于密码验证。


Ber*_*enz 5

通过使用盐(又名 SSHA),您已经完成了正确的操作。

没有盐的 SHA 和 SHA-2(或 SHA-256)本身不再被认为是安全的!加盐 SHA 哈希称为加盐 SHA 或 SSHA。

下面是一个简单的示例,说明对 SHA-1 进行哈希处理是多么容易。对于 SHA-2,也可以毫不费力地完成同样的操作。

在此 URL 中输入密码: http://www.xorbin.com/tools/sha1-hash-calculator 将哈希值复制粘贴到此 URL: https://hashes.com/en/decrypt/hash

这是一个对 SHA-2 进行反哈希处理的页面。此页面的工作方式是有人之前必须对您的密码进行哈希处理,否则它将找不到它:md5hashing dot net/hashing/sha256

这里有一个页面声称有完整的 SHA-2 表可供“捐赠”下载(我还没有尝试过):crackstation dot net/buy-crackstation-wordlist-password-cracking-dictionary.htm

这里有一篇很好的文章,解释了为什么必须使用 SSHA 而不是 SHA:crackstation dot net/hashing-security.htm