【问题标题】:Is there any method to convert a SHA256 hash string to a Java string?有什么方法可以将 SHA256 哈希字符串转换为 Java 字符串?
【发布时间】:2018-08-30 15:54:52
【问题描述】:

我有以下代码,我想要一个来自 SHA256 哈希字符串的 Java 字符串。有没有办法将十六进制字符串转换为其原始值?

public class CryptoHash {
    public static void main( String[] args ) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance( "SHA-256" );
        String text = "Text to hash, cryptographically.";

        // Change this to UTF-16 if needed
        md.update( text.getBytes( StandardCharsets.UTF_8 ) );
        byte[] digest = md.digest();

        String hex = String.format( "%064x", new BigInteger( 1, digest ) );
        System.out.println( hex );
    }
}

【问题讨论】:

  • 哈希不是完全意味着不可能转换回原始字符串吗?
  • 您能否澄清一下您是想从哈希中取回原始字符串,还是从输出的十六进制字符串中取回[]byte(摘要)?
  • 我想将输出的十六进制字符串转换为 ASCII
  • 您想如何将例如 0xFF 转换为 ASCII
  • 听起来您正试图将 SHA-256 散列字符串恢复为其原始形式。这是不可能的,因为 SHA-256 散列函数是所谓的单向散列。你只能把一个字符串变成一个散列字符串,你不能把散列字符串变成一个普通的、可读的字符串。

标签: java android sha256


【解决方案1】:

简单的回答:不,没有办法。

更长的答案:可能有一种使用蛮力策略的方法。但这需要很长时间,效率太高。

看,散列通常是为了使其无法逆转。您将字符串转换为一些哈希,这不能逆转。 你可以看看哈希和加密是如何工作的。

https://www.cryptocompare.com/coins/guides/how-does-a-hashing-algorithm-work/

如果这么简单,只使用一行代码,整个哈希的想法和过程就会有问题。

编辑:如果要将字符串转换为哈希,然后转换为十六进制,最后转换为 ASCII,您的结果将是原始哈希。因此,这个想法是行不通的。你不能这样解密。

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2012-03-10
    • 2016-10-21
    • 1970-01-01
    相关资源
    最近更新 更多