Какой тип данных SHA-вывода? - PullRequest
       49

Какой тип данных SHA-вывода?

0 голосов
/ 18 октября 2018

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 голосов
/ 18 октября 2018

Я не уверен, что понял ваш вопрос, но вот некоторые ответы:

Когда вы используете хеш-функцию SHA-1, она преобразует какое-то значение, которое вы задали на входе, в другое значение.В то время как ваше входное значение может быть сколько угодно, результат дайджеста будет фиксированным (ваш 160-битный результат).

Как я понимаю ваш вопрос, вы хотите придать некоторый "тип" тому, что вы задали при вводе и что вы получаете при выводе.Я думаю, в этом суть того, что вы неправильно понимаете: какие бы данные вы ни указывали при вводе, они являются битами (или байтами, если вы предпочитаете их группировать).То, что вы получаете на выходе, также является битами (или байтами).Затем вы можете представлять их так, как вам удобно: в виде шестнадцатеричного значения или в виде нескольких шестнадцатеричных значений, помещенных в массив.Это зависит от вас;)

В вашем примере кода, согласно документации :

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