Các hàm băm mật mã thuộc họ SHA-1 bao gồm 6 hàm:
- SHA-224, với giá trị băm là 224 bit.
- SHA-256, với gía trị băm là 256 bit.
- SHA-384, với giá trị băm là 384 bit.
- SHA-512, với giá trị băm là 512 bit.
- SHA-512/224, với giá trị băm là 512 bit.
- SHA-512/256, với giá trị băm là 512 bit.
Trong số này, SHA-256 và SHA-512 là các hàm băm được sử dụng phổ biến nhất. SHA-224 và SHA-384 là các phiên bản rút gọn của SHA-256 và SHA-512 tương ứng.
Để sử dụng các hàm băm mật mã trong Java chúng ta có thể sử dụng MessageDigest class thuộc package java.security.
Class MessagDigest cung cấp hàm băm mật mã sau để tìm giá trị băm của một văn bản như sau:
- MD2
- MD5
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
Các thuật toán này được khởi tạo trong phương thức tĩnh gọi là getInstance (). Sau khi chọn thuật toán, giá trị ban đầu sẽ được băm và trả về một mảng byte. Class BigInteger được sử dụng, để chuyển đổi mảng byte thành BigInteger có dấu, sau đó từ BigInteger chuyển sang dạng Hex để có được định dạng như mong đợi của MessageDigest.
import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class GFG { public static String encryptThisString(String input) { try { // getInstance() method is called with algorithm SHA-512 MessageDigest md = MessageDigest.getInstance("SHA-512"); byte[] messageDigest = md.digest(input.getBytes()); // Chuyển đổi mảng byte sang BigInteger BigInteger no = new BigInteger(1, messageDigest); // Chuyển đổi message digest sang dạng hex String hashtext = no.toString(16); // Add preceding 0s to make it 32 bit while (hashtext.length() < 32) { hashtext = "0" + hashtext; } // Trả về kết quả return hashtext; } // Cho các trường hợp xảy ra lỗi catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } // Driver code public static void main(String args[]) throws NoSuchAlgorithmException { System.out.println("HashCode Generated by SHA-512 for: "); String s1 = "GeeksForGeeks"; System.out.println("\n" + s1 + " : " + encryptThisString(s1)); String s2 = "hello world"; System.out.println("\n" + s2 + " : " + encryptThisString(s2)); } }
Output
HashCode Generated by SHA-512 for: GeeksForGeeks : acc10c4e0b38617f59e88e49215e2e894afaee5 ec948c2af6f44039f03c9fe47a9210e01d5cd926c142bdc9179c2ad 30f927a8faf69421ff60a5eaddcf8cb9c hello world : 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee5 11a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cf d830e81f605dcf7dc5542e93ae9cd76f
Nguồn tham khảo