我正在尝试使用SHA-256哈希我的用户密码字符串类型
我使用SHA-256使用以下method
对字符串进行哈希处理String text = "abc";
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes("UTF-8"));
要将btye数组转换为字符串,我使用了以下method
String doc2 = new String(hash, "UTF-8");
当我打印doc2输出时,我得到了垃圾
�x����AA@�]�"#�a��z���a�
我做错了什么???如何使用SHA-256散列字符串并将其转换回字符串?
答案 0 :(得分:8)
这将打开哈希
的十六进制表示String s = DatatypeConverter.printHexBinary(hash)
你无法从哈希
获得原始字符串答案 1 :(得分:1)
SHA256返回纯二进制输出,每个字符的所有值从00到FF基本上相同。
对于文字输出,您需要将其转换为文本格式,例如Base64 encoding
byte[] encodedBytes = Base64.encodeBase64("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
从加密声音哈希(或大多数哈希,甚至加密不健全的哈希)回到原始输入的唯一方法是在输入后将哈希应用于输入,直到得到相同的结果 - 这是原始输入,或者碰撞。