我正在尝试编写一个小的Java代码,以了解如何正确使用SHA1。
以下是我想出的代码段:
package dummyJavaExp;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Exp1 {
public static void main(String[] args) throws NoSuchAlgorithmException {
// TODO Auto-generated method stub
String str = "Hello there";
String hashstr = new String(MessageDigest.getInstance("SHA1").digest(str.getBytes()));
System.out.println("Encrypted value of " + str + " is: " + hashstr);
}
}
但是当我运行上面的代码时,上面的代码给出了一些奇怪的字符,如下面的输出消息所示:
Encrypted value of Hello there is: rlvU>?Þ¢‘4ónjòêì\Î
我认为加密的消息将是一些字母数字字符串。
我在代码中缺少什么吗?
答案 0 :(得分:2)
当您使用String sample = new String(byte[] bytes)
时,它将使用平台的默认字符集创建一个字符串,您的摘要字节在该字符集中可能没有字母数字表示。
尝试使用Base64或HexString显示摘要消息。
例如在JAVA8中:
您可以使用以下方式将摘要字节编码为字符串:
String hashstr = Base64.getEncoder().encodeToString(MessageDigest.getInstance("SHA1").digest(str.getBytes("UTF-8")));
您可以使用以下方法解码Base64:
byte [] digest = Base64.getDecoder().decode(hashstr);