Java Cryptography - Tạo MAC
MAC (Mluận văn Asự xác thực Code) thuật toán là một kỹ thuật mật mã khóa đối xứng để cung cấp xác thực thông điệp. Để thiết lập quy trình MAC, người gửi và người nhận dùng chung một khóa K đối xứng.
Về cơ bản, MAC là một tổng kiểm tra được mã hóa được tạo ra trên thông điệp cơ bản được gửi cùng với một thông báo để đảm bảo xác thực thông điệp.
Quá trình sử dụng MAC để xác thực được mô tả trong hình minh họa sau:
Trong Java Mac lớp của javax.cryptogói cung cấp chức năng của mã xác thực tin nhắn. Làm theo các bước dưới đây để tạo mã xác thực tin nhắn bằng lớp này.
Bước 1: Tạo đối tượng KeyGenerator
Các KeyGenerator lớp học cung cấp getInstance() phương thức chấp nhận một biến Chuỗi đại diện cho thuật toán tạo khóa bắt buộc và trả về KeyGenerator đối tượng tạo khóa bí mật.
Tạo nên KeyGenerator đối tượng sử dụng getInstance() như hình dưới đây.
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
Bước 2: Tạo đối tượng SecureRandom
Các SecureRandom lớp của java.Securitygói cung cấp một trình tạo số ngẫu nhiên mạnh được sử dụng để tạo các số ngẫu nhiên trong Java. Khởi tạo lớp này như hình dưới đây.
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
Bước 3: Khởi tạo KeyGenerator
Các KeyGenerator lớp cung cấp một phương thức có tên init() phương pháp này chấp nhận SecureRandom đối tượng và khởi tạo hiện tại KeyGenerator.
Khởi tạo đối tượng KeyGenerator đã tạo ở bước trước bằng phương pháp này.
//Initializing the KeyGenerator
keyGen.init(secRandom);
Bước 4: Tạo khóa
Tạo khóa bằng cách sử dụng generateKey() phương pháp của KeyGenerator lớp như hình bên dưới.
//Creating/Generating a key
Key key = keyGen.generateKey();
Bước 5: Khởi tạo đối tượng Mac
Các init() phương thức của lớp Mac chấp nhận một đối tượng Key và khởi tạo đối tượng Mac hiện tại bằng cách sử dụng khóa đã cho.
//Initializing the Mac object
mac.init(key);
Bước 6: Kết thúc hoạt động mac
Các doFinal()phương thức của lớp Mac được sử dụng để kết thúc hoạt động của Mac. Truyền dữ liệu cần thiết ở dạng mảng byte vào phương thức này và thực hiện thao tác như hình dưới đây.
//Computing the Mac
String msg = new String("Hi how are you");
byte[] bytes = msg.getBytes();
byte[] macResult = mac.doFinal(bytes);
Thí dụ
Ví dụ sau đây minh họa việc tạo ra Mã xác thực thư (MAC) bằng cách sử dụng JCA. Ở đây, chúng tôi nhận một thông báo đơn giản "Xin chào, bạn khỏe không" và tạo máy Mac cho tin nhắn đó.
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
public class MacSample {
public static void main(String args[]) throws Exception{
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
//Initializing the KeyGenerator
keyGen.init(secRandom);
//Creating/Generating a key
Key key = keyGen.generateKey();
//Creating a Mac object
Mac mac = Mac.getInstance("HmacSHA256");
//Initializing the Mac object
mac.init(key);
//Computing the Mac
String msg = new String("Hi how are you");
byte[] bytes = msg.getBytes();
byte[] macResult = mac.doFinal(bytes);
System.out.println("Mac result:");
System.out.println(new String(macResult));
}
}
Đầu ra
Chương trình trên sẽ tạo ra kết quả sau:
Mac result:
HÖ„^ǃÎ_Utbh…?š_üzØSSÜh_ž_œa0ŽV?