如何使用SHA-256散列字符串

时间:2014-04-02 04:08:24

标签: java string hash sha256

我正在尝试使用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散列字符串并将其转换回字符串?

2 个答案:

答案 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));

从加密声音哈希(或大多数哈希,甚至加密不健全的哈希)回到原始输入的唯一方法是在输入后将哈希应用于输入,直到得到相同的结果 - 这是原始输入,或者碰撞。