SHA-1 产生 160位 (20字节)哈希值,称为消息摘要–通常呈现为十六进制数字, 40位长,那么这个( 20字节)十六进制值是数组还是普通的十六进制值?
这是我的代码:那么输出的数据类型是什么?
import java.security.MessageDigest;
public class MessageDigestExample {
public static void main(String[] args)throws Exception{
String input = "This is a message";
MessageDigest hash = MessageDigest.getInstance("SHA1");
System.out.println("input : " + input);
hash.update(Utils.toByteArray(input));
System.out.println("digest : " + Utils.toHex(hash.digest()));
}}
答案 0 :(得分:0)
我不确定我是否理解您的问题,但以下是一些答案:
当您使用SHA-1哈希函数时,它将把您在输入中提供的某些值转换为另一个值。输入值可以是您想要的长度,摘要结果将是固定的(您的160位结果)。
据我所知,您想对输入的内容和输出的内容赋予一些“类型”。我认为这是您误解的要点:无论您在输入中设置的数据是什么,它们都是正好位(如果希望将它们分组,则为字节)。您在输出中得到的也是位(或字节)。然后,您可以选择按自己的喜好来表示它们:十六进制值或数组中放入的多个十六进制值。由您决定;)
在您的代码示例中,根据the documentation:
import java.security.MessageDigest;
public class MessageDigestExample {
public static void main(String[] args) throws Exception{
String input = "This is a message";
MessageDigest hash = MessageDigest.getInstance("SHA1");
//Here "input" is a String
System.out.println("input : " + input);
//Here you convert your "input" String into a byte array
hash.update(Utils.toByteArray(input));
//Here you get the "hash.digest()" result, which is an byte array, then you convert it into some hexadecimal value
//(just check the library documentation where "Utils.toHex()" function comes from to know what it returns exactly).
//Finally you cast it into a String value as you print it.
System.out.println("digest : " + Utils.toHex(hash.digest()));