Java Cryptography - Thông báo
Hàm băm cực kỳ hữu ích và xuất hiện trong hầu hết các ứng dụng bảo mật thông tin.
Hàm băm là một hàm toán học chuyển đổi một giá trị số đầu vào thành một giá trị số nén khác. Đầu vào cho hàm băm có độ dài tùy ý nhưng đầu ra luôn có độ dài cố định.
Các giá trị được trả về bởi một hàm băm được gọi là message digest hoặc đơn giản hash values. Hình sau minh họa hàm băm.
Java cung cấp một lớp có tên MessageDigestthuộc về gói java.security. Lớp này hỗ trợ các thuật toán như thuật toán SHA-1, SHA 256, MD5 để chuyển đổi một thông báo có độ dài tùy ý thành một thông báo tóm tắt.
Để chuyển đổi một tin nhắn nhất định thành một thông báo tin nhắn, hãy làm theo các bước dưới đây:
Bước 1: Tạo đối tượng MessageDigest
Lớp MessageDigest cung cấp một phương thức có tên getInstance(). Phương thức này chấp nhận một biến Chuỗi chỉ định tên của thuật toán sẽ được sử dụng và trả về một đối tượng MessageDigest thực hiện thuật toán được chỉ định.
Tạo đối tượng MessageDigest bằng cách sử dụng getInstance() như hình dưới đây.
MessageDigest md = MessageDigest.getInstance("SHA-256");
Bước 2: Truyền dữ liệu đến đối tượng MessageDigest đã tạo
Sau khi tạo đối tượng thông báo thông báo, bạn cần chuyển thông điệp / dữ liệu cho nó. Bạn có thể làm như vậy bằng cách sử dụngupdate() phương pháp của MessageDigest , phương thức này chấp nhận một mảng byte đại diện cho thông báo và thêm / chuyển nó vào đối tượng MessageDigest đã tạo ở trên.
md.update(msg.getBytes());
Bước 3: Tạo thông báo thông báo
Bạn có thể tạo thông báo tóm tắt bằng cách sử dụng digest() phương thức od lớp MessageDigest phương thức này tính toán hàm băm trên đối tượng hiện tại và trả về thông báo tóm tắt dưới dạng mảng byte.
Tạo thông báo tóm tắt bằng phương pháp thông báo.
byte[] digest = md.digest();
Thí dụ
Sau đây là một ví dụ đọc dữ liệu từ một tệp và tạo một bản tóm tắt thông báo và in nó.
import java.security.MessageDigest;
import java.util.Scanner;
public class MessageDigestExample {
public static void main(String args[]) throws Exception{
//Reading data from user
Scanner sc = new Scanner(System.in);
System.out.println("Enter the message");
String message = sc.nextLine();
//Creating the MessageDigest object
MessageDigest md = MessageDigest.getInstance("SHA-256");
//Passing data to the created MessageDigest Object
md.update(message.getBytes());
//Compute the message digest
byte[] digest = md.digest();
System.out.println(digest);
//Converting the byte array in to HexString format
StringBuffer hexString = new StringBuffer();
for (int i = 0;i<digest.length;i++) {
hexString.append(Integer.toHexString(0xFF & digest[i]));
}
System.out.println("Hex format : " + hexString.toString());
}
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
Enter the message
Hello how are you
[B@55f96302
Hex format: 2953d33828c395aebe8225236ba4e23fa75e6f13bd881b9056a3295cbd64d3