2012-06-02 2 views
1

Здесь я прилагаю мой код касается «SHA-1» алгоритм, основанный на Java код же входного значения приведены вручную:Почему алгоритм SHA-1 создает разные значения для одного и того же входного значения?

import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
import sun.misc.BASE64Encoder; 

public class NewClass {  
public static void main(String args[]) throws NoSuchAlgorithmException   
{  
    MessageDigest digest = MessageDigest.getInstance("SHA-1");  
    System.out.println("Algorithm :"+digest.getAlgorithm());  
    digest.update("welcome".getBytes());  
    byte[] result = digest.digest();  
    hash = (new BASE64Encoder()).encode(result);  
    MessageDigest digest1 = MessageDigest.getInstance("SHA-1");  
    digest1.update("welcome".getBytes());  
    byte[] result1 = digest1.digest();  
    System.out.println(result);  
    System.out.println(result1);  
    String hash1 = (new BASE64Encoder()).encode(result);  
    System.out.println("Digest value"+hash);  
    System.out.println("Digest value"+hash1);  
} 

} 

выход:

Algorithm :SHA-1 

[[email protected] 

[[email protected] 

Digest value wLE3/i15JFnyb/djzORFdKW1qwM= 

Digest value wLE3/i15JFnyb/djzORFdKW1qwM= 

выше алгоритм производит тот же хэш-код, но промежуточные значения не совпадают. Почему это?

+0

Я не отвечаю на ваш вопрос, но я думаю, что у вас есть мисс «String hash1 = (новый BASE64Encoder()). Encode (result);', это должен быть результат1. – secmask

ответ

9

[[email protected] - это то, что вы получаете, когда пытаетесь напечатать массив на Java. Он просто печатает свой адрес памяти, а не содержимое. Очевидно, что два разных массива будут иметь разные адреса.

5

Эти две линии не имеют никакого смысла:

System.out.println(result); 
System.out.println(result1); 

не распечатываются содержимое двух байтовых массивов, как вы, очевидно, ожидать. Вместо этого напечатайте тип ([B обозначает массив байтов) и число, которое можно рассматривать как адрес памяти массива.

Чтобы распечатать содержимое массива байтов, используйте кодировку Base 64 и распечатайте полученную строку. Я уверен, что они будут такими же.

Смежные вопросы