SHA-a输出的数据类型是什么?

时间:2018-10-18 11:33:54

标签: types hex sha1 sha

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()));

}}

1 个答案:

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