Halo, Habr! Saya mempersembahkan untuk Anda terjemahan artikel keempat "Java Mac" oleh Jakob Jenkov dari serangkaian artikel untuk pemula yang ingin mempelajari dasar-dasar kriptografi di Jawa.
Daftar isi:
- Kriptografi Jawa
- Java cipher
- Pesan pesan
- Mac
- Tanda tangan
- Keypair
- Keygenerator
- KeyPairGenerator
- Keystore
- Keytool
- Sertifikat
- Pabrik Sertifikat
- CertPath
Kode Otentikasi Pesan (MAC)
Java Mac ( javax.crypto.Mac ) menghasilkan kode otentikasi pesan (MAC) dari data biner. MAC adalah pesan intisari yang dienkripsi dengan kunci rahasia. Hanya dengan kunci rahasia Anda dapat memverifikasi keaslian MAC.
Instansiasi
Sebelum menggunakan kelas Mac, Anda harus membuat instance Mac. Sebuah instance dari kelas Mac dibuat menggunakan metode getInstance () . Berikut adalah contoh membuat instance Mac:
Mac mac = Mac.getInstance("HmacSHA256");
Parameter string yang diteruskan ke getInstance () berisi nama algoritma yang digunakan. Dalam hal ini, algoritma HmacSHA256 digunakan.
Inisialisasi
Setelah membuat instance, Mac harus diinisialisasi. Instance Mac diinisialisasi dengan memanggil metode init () , meneruskan sebagai parameter kunci rahasia yang akan digunakan oleh instance. Berikut adalah contoh menginisialisasi instance Mac:
byte[] keyBytes = new byte[]{0,1,2,3,4,5,6,7,8 ,9,10,11,12,13,14,15}; String algorithm = "RawBytes"; SecretKeySpec key = new SecretKeySpec(keyBytes, algorithm); mac.init(key);
Metode init () menerima instance Key . Contoh ini menggunakan SecretKeySpec , yang mengimplementasikan antarmuka Key.
Perhitungan MAC
Menggunakan instance MAC (setelah inisialisasi), Anda dapat mulai menghitung data MAC. Untuk menghitung nilai MAC, Anda memanggil metode pembaruan () atau doFinal () . Jika Anda hanya memiliki satu blok data untuk menghitung MAC, Anda dapat langsung memanggil doFinal () , misalnya:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] macBytes = mac.doFinal(data);
Jika Anda memiliki beberapa blok data untuk menghitung MAC, misalnya, jika Anda membaca file blok demi blok, maka Anda harus memanggil metode pembaruan () untuk setiap blok dan diakhiri dengan doFinal () pada blok terakhir. Berikut ini sebuah contoh:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] data2 = "0123456789".getBytes("UTF-8"); mac.update(data); mac.update(data2); byte[] macBytes = mac.doFinal();