我有以下代码,我想要一个来自 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 );
}
}
简单的答案:不,没有办法。
更长的答案:可能有一种方法可以使用蛮力策略。但这需要很长时间,太长了,效率不高。
看,哈希一般是为了使其无法逆转。您将字符串转换为某个哈希,这无法逆转。 你可以看看哈希和加密是如何工作的。
https://www.cryptocompare.com/coins/guides/how-does-a-hashing-algorithm-work/
如果这么简单,只使用一行代码,整个散列的想法和过程就会有问题。
编辑:如果要将字符串转换为哈希,然后转换为十六进制,最后转换为ASCII,您的结果将是原始哈希。因此,这个想法不会成功。您无法以这种方式解密它。