我有以下代码,我想要一个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 );
}
}
答案 0 :(得分:1)
简单的答案:不,没有办法。
更长的答案:也许有一种使用蛮力策略的方法。但是要花很长时间,效率太高。
请参阅,通常使哈希成为不可能反转。您将字符串转换为一些哈希,并且不能将其反转。 您可以看看哈希和加密的工作原理。
https://www.cryptocompare.com/coins/guides/how-does-a-hashing-algorithm-work/
如果那样简单,仅使用一行代码,则整个散列的思想和过程将是有问题的。
编辑:如果要将字符串转换为哈希,然后转换为十六进制,最后转换为ASCII,则结果将是原始哈希。因此,这个想法行不通。您无法通过这种方式对其进行解密。