Bagaimana cara mendapatkan checksum MD5 untuk file apa pun di Jawa? Bagaimana cara menggunakan utilitas DigestUtils.md5Hex Apache Common?
Diterbitkan: 2021-08-28
Memperketat keamanan aplikasi perusahaan Anda adalah tantangan terbesar organisasi mana pun.
Pertimbangkan skenario produksi aktual ini:
- Anda memiliki aplikasi yang
reads the value
dari file - Berdasarkan nilai file, ia
performs some operations
seperti tambah/hapus/eksekusi - Anda telah menerapkan aplikasi ini di lingkungan produksi
- Bagaimana jika beberapa
unauthorized person
changes the value
file itu tanpa sepengetahuan Anda? - Aplikasi Anda
simply gets new value
dari file dan menjalankan logika yang dapat menyebabkanunexpected outcome
yang tidak diharapkan - Jika Anda mungkin mengaktifkan checksum MD5 untuk file itu – Anda
could have created an exception
dengan pesan kesalahan yang jelas danyou could have prevented disaster
atau hasil yang tidak diharapkan
Apa itu checksum MD5?
Checksum MD5 untuk file adalah nilai 128-bit value
, seperti sidik jari file. Ini dapat berguna baik untuk membandingkan file dan kontrol integritasnya.
Untuk mendapatkan nilai yang sama untuk file yang berbeda hampir tidak mungkin. Dalam tutorial ini kita akan membuat program Java sederhana yang membuat dan mengembalikan nilai MD5 untuk file yang diberikan. Dalam kasus kami ini adalah file index.php
.
Mari kita mulai:
Langkah 1
Buat kelas publik CrunchifyGetMD5ForFile.java
Langkah 2
Impor di bawah dua dependensi pakar ke file pom.xml
proyek Anda. Tutorial untuk mengonversi proyek ke proyek pakar.
1 2 3 4 5 6 7 8 9 10 |
< dependency > < groupId > commons - codec < / groupId > < artifactId > commons - codec < / artifactId > < version > 1.10 < / version > < / dependency > < dependency > < groupId > commons - io < / groupId > < artifactId > commons - io < / artifactId > < version > 2.4 < / version > < / dependency > |
Kami menggunakan perpustakaan commons-codec
dan commons-io
.
Langkah-3
Buat checksum MD5 menggunakan utilitas DigestUtils.md5Hex
dan hasil cetak di konsol.
DigestUtils.md5Hex => Implementasi encodeHex
1 2 3 4 5 6 7 8 9 10 |
protected static char [ ] encodeHex ( final byte [ ] data , final char [ ] toDigits ) { final int l = data . length ; final char [ ] out = new char [ l < < 1 ] ; // two characters form the hex value. for ( int i = 0 , j = 0 ; i < l ; i ++ ) { out [ j ++ ] = toDigits [ ( 0xF0 & data[i]) >>> 4]; out [ j ++ ] = toDigits [ 0x0F & data[i]]; } return out ; } |
Berikut adalah program lengkapnya.
Buat kelas crunchifyGetMd5ForFile.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
package crunchify . com . tutorials ; import org . apache . commons . codec . digest . DigestUtils ; import org . apache . commons . io . IOUtils ; import java . io . File ; import java . io . FileInputStream ; import java . io . IOException ; /** * @author Crunchify.com * How to get MD5 checksum for any given file in Java? Use commons-codec's DigestUtils.md5Hex. */ public class CrunchifyGetMD5ForFile { public static String crunchifyGetMd5ForFile ( String crunchifyFile ) { // File(): Creates a new File instance by converting the given pathname string into an abstract pathname. // If the given string is the empty string, then the result is the empty abstract pathname. File myFile = new File ( crunchifyFile ) ; return crunchifyGetMd5ForFile ( myFile ) ; } public static String crunchifyGetMd5ForFile ( File crunchifyFile ) { String crunchifyValue = null ; // FileInputStream: A FileInputStream obtains input bytes from a file in a file system. What files are available depends on the host environment. // FileInputStream is meant for reading streams of raw bytes such as image data. For reading streams of characters, consider using FileReader. FileInputStream crunchifyInputStream = null ; try { crunchifyInputStream = new FileInputStream ( crunchifyFile ) ; // md5Hex converts an array of bytes into an array of characters representing the hexadecimal values of each byte in order. // The returned array will be double the length of the passed array, as it takes two characters to represent any given byte. // DigestUtils(): Operations to simplify common MessageDigest tasks. This class is immutable and thread-safe. // However the MessageDigest instances it creates generally won't be. // The MessageDigestAlgorithms class provides constants for standard digest algorithms that can be // used with the getDigest(String) method and other methods that require the Digest algorithm name. // toByteArray(): Get the contents of an InputStream as a byte[]. // This method buffers the input internally, so there is no need to use a BufferedInputStream. crunchifyValue = DigestUtils . md5Hex ( IOUtils . toByteArray ( crunchifyInputStream ) ) ; // md5Hex(): Calculates the MD5 digest and returns the value as a 32 character hex string. } catch ( IOException e ) { log ( "Hey there is an error: " + e ) ; } finally { // closeQuietly(): Unconditionally close an InputStream. // Equivalent to InputStream.close(), except any exceptions will be ignored. // This is typically used in finally blocks. IOUtils . closeQuietly ( crunchifyInputStream ) ; } return crunchifyValue ; } // Simple log util private static void log ( String string ) { System . out . println ( string ) ; } public static void main ( String [ ] agrs ) { // Let's get MD5 for File index.php located at /Users/app/Download/ String file = "//cdn.crunchify.com/Users/app/Download/crunchify.png" ; String md5Value = crunchifyGetMd5ForFile ( file ) ; log ( "File: " + file + " \nValue: " + md5Value ) ; } } |
Jalankan saja program di atas sebagai Aplikasi Java dan Anda akan melihat hasil seperti ini.

Hasil konsol IntelliJ IDEA:
1 2 3 4 |
File : / Users / app / Download / crunchify . png Value : 103e7ae51e641d674780f7a03b491321 Process finished with exit code 0 |
Bagaimana Anda akan menggunakan checksum MD5 ini saat runtime untuk memverifikasi integritas file?
Anda dapat membandingkan checksum MD5 ini saat runtime dengan nilai yang disimpan dalam database Anda, seperti, MySQL, Oracle, dll.
Ada beberapa cara lain yang dapat Anda lakukan untuk mencapai hal yang sama, tetapi kami akan membahas ini di tutorial mendatang.