Checksum di Jawa

Java Top

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya

1. Ikhtisar

Dalam artikel mini ini, kami akan memberikan penjelasan singkat tentang apa itu checksum dan menunjukkan cara menggunakan beberapa fitur bawaan Java untuk menghitung checksum .

2. Checksum dan Algoritma Umum

Pada dasarnya, checksum adalah representasi yang diperkecil dari aliran data biner.

Checksum biasanya digunakan untuk pemrograman jaringan untuk memeriksa bahwa pesan lengkap telah diterima. Setelah menerima pesan baru, checksum dapat dihitung ulang dan dibandingkan dengan checksum yang diterima untuk memastikan bahwa tidak ada bit yang hilang. Selain itu, mereka mungkin juga berguna untuk manajemen file, misalnya untuk membandingkan file atau untuk mendeteksi perubahan.

Ada beberapa algoritme umum untuk membuat checksum, seperti Adler32 dan CRC32 . Algoritme ini bekerja dengan mengubah urutan data atau byte menjadi urutan huruf dan angka yang jauh lebih kecil. Mereka dirancang sedemikian rupa sehingga setiap perubahan kecil dalam input akan menghasilkan checksum terhitung yang sangat berbeda.

Mari kita lihat dukungan Java untuk CRC32. Perhatikan bahwa meskipun CRC32 mungkin berguna untuk checksum, itu tidak disarankan untuk operasi yang aman, seperti mencirikan kata sandi.

3. Checksum Dari String atau Byte Array

Hal pertama yang perlu kita lakukan adalah mendapatkan masukan ke algoritma checksum.

Jika kita memulai dengan String , kita bisa menggunakan metode getBytes () untuk mendapatkan array byte dari String :

String test = "test"; byte[] bytes = test.getBytes();

Selanjutnya, kita dapat menghitung checksum menggunakan array byte:

public static long getCRC32Checksum(byte[] bytes) { Checksum crc32 = new CRC32(); crc32.update(bytes, 0, bytes.length); return crc32.getValue(); }

Di sini, kami menggunakan kelas CRC32 bawaan Java . Setelah kelas yang dipakai, kita menggunakan pembaruan metode untuk memperbarui Checksum misalnya dengan byte dari input.

Sederhananya, metode pembaruan menggantikan byte yang dipegang oleh Objek CRC32 - ini membantu penggunaan ulang kode dan meniadakan kebutuhan untuk membuat instance baru dari Checksum. Kelas CRC32 menyediakan beberapa metode yang diganti untuk menggantikan seluruh byte array atau beberapa byte di dalamnya.

Terakhir, setelah menyetel byte , kami mengekspor checksum dengan metode getValue .

4. Checksum Dari InputStream

Ketika berhadapan dengan kumpulan data biner yang lebih besar, pendekatan di atas tidak akan terlalu hemat memori karena setiap byte dimuat ke dalam memori .

Ketika kami memiliki InputStream , kami dapat memilih untuk menggunakan CheckedInputStream untuk membuat checksum kami . Dengan menggunakan pendekatan ini, kita dapat menentukan berapa banyak byte yang diproses pada satu waktu.

Dalam contoh ini, kami memproses jumlah byte tertentu pada saat sampai kami mencapai akhir aliran.

Nilai checksum kemudian tersedia dari CheckedInputStream :

public static long getChecksumCRC32(InputStream stream, int bufferSize) throws IOException { CheckedInputStream checkedInputStream = new CheckedInputStream(stream, new CRC32()); byte[] buffer = new byte[bufferSize]; while (checkedInputStream.read(buffer, 0, buffer.length) >= 0) {} return checkedInputStream.getChecksum().getValue(); }

5. Kesimpulan

Dalam tutorial ini, kita melihat bagaimana menghasilkan checksum dari array byte dan InputStream menggunakan dukungan CRC32 Java.

Seperti biasa, kode tersedia di GitHub.

Jawa bawah

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya