2012-02-22 41 views
6

Tôi đang cố gắng để có được một giá trị băm cho một chuỗi bằng cách sử dụng MessageDigest trong Java, nhưng giá trị là khác nhau mỗi lần. Khi tôi chạy chương trình hai lần nó sẽ một lần nữa có câu trả lời hoàn toàn khác nhau.Tại sao MessageDigest trả lại các câu trả lời khác nhau cho cùng một chuỗi?

 MessageDigest md = null; 

     try { 
      md = MessageDigest.getInstance("SHA-1"); 
     } catch (NoSuchAlgorithmException nsae) { 
     } 

     md.update("string".getBytes()); 
     byte[] digest = md.digest(); 
     System.out.println(digest); 

     md.reset(); 

     md.update("string".getBytes()); 
     byte[] digest2 = md.digest(); 
     System.out.println(digest2); 
+0

Cũng lưu ý rằng 'MessageDigest # reset()' được tự động gọi với 'MessageDigest # digest()'. [(xem Javadoc)] (https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html#digest()) – ZX9

Trả lời

10

Bạn đang xuất đối tượng byte[], chứ không phải nội dung mảng byte. Sử dụng

System.out.println(Arrays.toString(digest1)); 
.... 
System.out.println(Arrays.toString(digest2)); 
+0

Làm cách nào để xuất nội dung? Tôi nghĩ rằng tôi đã bỏ lỡ phần .toString() nhưng nó dường như không tạo ra bất kỳ sự khác biệt nào. – user1183661

+0

Xin lỗi, đã thêm mã quá trễ :) 'Mảng' là' java.util.Arrays' –

+1

Chỉ cần làm rõ: 'digest1' (hoặc' digest2') có kiểu 'byte []' kế thừa 'Đối tượng '' s ​​'toString()' implementation: nó xuất ra kiểu đối tượng bị xáo trộn và hashCode của nó. Đây là những gì bạn đã nhận được ban đầu. –

Các vấn đề liên quan