Java 将字符串与SHA-256相匹配后出现错误结果

Java 将字符串与SHA-256相匹配后出现错误结果,java,android,string,character-encoding,sha256,Java,Android,String,Character Encoding,Sha256,我试图使用SHA-256散列字符串,但结果是错误的,并且包含特殊字符 代码: 结果字符串: ��Ё�L}e�/��Z���O+�,�]l�� 哈希过程正确,但结果由字节数组组成。要使其可读,请使用StringBuffer。作为转换的示例,请查看 StringBuffer sb=new StringBuffer(); for(int i=0;i

我试图使用
SHA-256
散列字符串,但结果是错误的,并且包含特殊字符

代码:

结果字符串:

��Ё�L}e�/��Z���O+�,�]l��

哈希过程正确,但结果由字节数组组成。要使其可读,请使用
StringBuffer
。作为转换的示例,请查看

StringBuffer sb=new StringBuffer();
for(int i=0;i
哈希过程正确,但结果由字节数组组成。要使其可读,请使用
StringBuffer
。作为转换的示例,请查看

StringBuffer sb=new StringBuffer();
for(int i=0;i
我认为你的散列方式没问题。如果您希望在以下内容之后将其作为十六进制字符串:

import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
String hex = (new HexBinaryAdapter()).marshal(md.digest(password.getBytes(StandardCharsets.UTF_8)));

我觉得你的方式是好的。如果您希望在以下内容之后将其作为十六进制字符串:

import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
String hex = (new HexBinaryAdapter()).marshal(md.digest(password.getBytes(StandardCharsets.UTF_8)));

返回的数组是散列的原始字节,如果需要十六进制格式,则应进行检查。返回的数组是散列的原始字节,如果需要十六进制格式,则应进行检查。
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
String hex = (new HexBinaryAdapter()).marshal(md.digest(password.getBytes(StandardCharsets.UTF_8)));