Kriptografi di Jawa. Message ClassDigest

Halo, Habr! Saya mempersembahkan kepada Anda terjemahan artikel ketiga "Java MessageDigest" oleh Jakob Jenkov dari serangkaian artikel untuk pemula yang ingin mempelajari dasar-dasar kriptografi di Jawa.


Daftar isi:


  1. Kriptografi
  2. Sandi
  3. Pesan pesan
  4. Mac
  5. Tanda tangan
  6. Keypair
  7. Keygenerator
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Sertifikat
  12. Pabrik Sertifikat
  13. CertPath

Java MessageDigest


MessageDigest kelas Java mewakili fungsi hash kriptografis yang dapat menghitung intisari pesan dari data biner. Ketika Anda menerima satu set data terenkripsi, Anda tidak dapat memastikan bahwa itu tidak berubah selama transportasi. Intisari pesan membantu mengatasi masalah ini.


Untuk menentukan apakah data terenkripsi telah dimodifikasi selama transportasi, pengirim harus menghitung pesan intisari dari data dan mengirimkannya bersama dengan data. Sisi lain, menerima data terenkripsi dan intisari pesan, dapat menghitung ulang intisari pesan dari data dan memeriksa apakah intisari pesan yang dihitung cocok dengan intisari pesan yang diterima dengan data. Jika dua pesan dicerna, ada kemungkinan data terenkripsi tidak berubah selama transportasi.


Ada beberapa kondisi yang harus dipenuhi agar pesan intis berguna sebagai mekanisme deteksi perubahan. Namun, kondisi yang tepat adalah bagian dari teori kriptografi yang tidak dibahas dalam artikel ini, tetapi hanya menjelaskan cara menggunakan Java untuk menerima intisari pesan di kelas MessageDigest.


Membuat instance dari MessageDigest


Untuk membuat instance kelas MessageDigest, metode getInstance () statis dari kelas MessageDigest dipanggil. Berikut adalah contoh membuat instance dari MessageDigest:


MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); 

Parameter string yang diteruskan ke metode getInstance () menentukan algoritma digest yang digunakan untuk pesan tertentu.


Algoritma Pesan Intisari


Java Cryptography API mendukung algoritma intisari pesan berikut (penyedia kriptografi eksternal dapat mendukung lebih banyak):


  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

Tidak semua algoritma ini sama-sama aman. Pada saat penulisan, disarankan agar Anda menggunakan SHA-256 atau lebih tinggi untuk mendapatkan tingkat keamanan setinggi mungkin.


Perhitungan Intisari Pesan


Dengan membuat instance MessageDigest, Anda dapat menggunakannya untuk menghitung intisari pesan. Jika Anda memiliki satu blok data untuk menghitung intisari pesan, gunakan metode intisari () . Inilah yang tampak seperti perhitungan intisari pesan dari satu blok data:


 byte[] data1 = "0123456789".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] digest = messageDigest.digest(data1); 

Jika ada beberapa blok data yang akan disertakan dalam intisari pesan yang sama, panggil metode pembaruan () dan akhiri dengan ajakan untuk intisari () . Begini cara perhitungan intisari pesan dari beberapa blok data:


 byte[] data1 = "0123456789".getBytes("UTF-8"); byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.update(data1); messageDigest.update(data2); byte[] digest = messageDigest.digest(); 

Source: https://habr.com/ru/post/id444974/


All Articles