【发布时间】: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 散列函数是所谓的单向散列。你只能把一个字符串变成一个散列字符串,你不能把散列字符串变成一个普通的、可读的字符串。