我有以下代码,我想从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 );
}
}
简单回答:不,没有办法。
更长的答案:可能有一种使用暴力战略的方法。但这需要很长时间,而且效率太长。
看,哈希一般是为了让它无法逆转。您将String转换为一些Hash,这是不可逆转的。您可以查看Hashes和Encrypting的工作原理。
https://www.cryptocompare.com/coins/guides/how-does-a-hashing-algorithm-work/
如果这很容易,只使用一行代码,散列的整个想法和过程就会出问题。
编辑:如果要将String转换为Hash,然后转换为Hex,最后转换为ASCII,则结果将是原始Hash。因此,这个想法不会成功。你无法以这种方式解密它。