HMAC-SHA256 untuk Integritas Pesan
Buat dan verifikasi tanda tangan HMAC-SHA256 untuk memastikan integritas payload API.
HMAC-SHA256 untuk Integritas Pesan adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Apa Itu HMAC
HMAC (Kode Autentikasi Pesan berbasis Hash) menggabungkan fungsi hash kriptografis dengan kunci rahasia untuk menghasilkan MAC. HMAC membuktikan bahwa data tidak dimanipulasi DAN pengirim mengetahui kunci rahasia.
HMAC vs Hash Biasa
Hash SHA-256 biasa dapat dihitung oleh siapa saja. HMAC memerlukan kunci rahasia — hanya pihak yang mengetahui kunci tersebut yang dapat membuat atau memverifikasi HMAC yang valid. Hash biasa menyediakan integritas, tetapi tidak menyediakan autentikasi.
Menghitung HMAC-SHA256 dalam Java
Gunakan Mac.getInstance("HmacSHA256"), inisialisasi dengan SecretKeySpec, lalu panggil doFinal(data).
byte[] keyBytes = "my-secret-key".getBytes(StandardCharsets.UTF_8);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] hmac = mac.doFinal("payload data".getBytes(StandardCharsets.UTF_8));
String hmacHex = HexFormat.of().formatHex(hmac);
System.out.println(hmacHex); // 64-char hexMemverifikasi HMAC
Hitung ulang HMAC atas data yang diterima menggunakan kunci bersama. Gunakan perbandingan dengan waktu konstan (MessageDigest.isEqual) untuk mencegah serangan waktu.
byte[] expectedHmac = computeHmac(key, receivedPayload);
byte[] actualHmac = HexFormat.of().parseHex(receivedHmacHex);
boolean valid = MessageDigest.isEqual(expectedHmac, actualHmac);
if (!valid) throw new SecurityException("HMAC verification failed — data tampered!");Membuat Kunci yang Aman
Kunci HMAC harus berupa byte acak, bukan kata sandi. Gunakan KeyGenerator atau SecureRandom untuk membuat kunci 256-bit.
KeyGenerator kg = KeyGenerator.getInstance("HmacSHA256");
kg.init(256);
SecretKey key = kg.generateKey();
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());HMAC untuk Penandatanganan Permintaan API
Hitung HMAC atas metode HTTP, jalur, stempel waktu, dan isi. Sertakan HMAC dalam header X-Signature. Server menghitung ulang dan membandingkannya untuk memverifikasi bahwa permintaan tidak dimanipulasi.
String payload = method + "\n" + path + "\n" + timestamp + "\n" + body;
byte[] hmac = computeHmac(apiSecretKey, payload);
request.header("X-Signature", "hmac-sha256=" + HexFormat.of().formatHex(hmac));
request.header("X-Timestamp", timestamp);Pencegahan Serangan Pemutaran Ulang
Penyerang dapat mengirim ulang permintaan bertanda tangan yang valid. Sertakan stempel waktu dalam muatan yang ditandatangani dan tolak permintaan yang berusia lebih dari beberapa menit.
long timestamp = Long.parseLong(request.getHeader("X-Timestamp"));
if (Math.abs(System.currentTimeMillis() / 1000 - timestamp) > 300) {
throw new SecurityException("Request too old — possible replay attack");
}HMAC untuk Verifikasi Webhook
GitHub, Stripe, dan banyak layanan lainnya menandatangani webhook dengan HMAC. Verifikasi header X-Hub-Signature-256 untuk memastikan webhook berasal dari layanan tersebut dan tidak diubah.
// GitHub webhook verification:
String received = request.getHeader("X-Hub-Signature-256").replace("sha256=","");
byte[] expected = computeHmac(webhookSecret, request.getBody());
boolean valid = MessageDigest.isEqual(expected, HexFormat.of().parseHex(received));HMAC dalam JWT
HS256 (HMAC-SHA256) adalah algoritme tanda tangan JWT yang umum. header+muatan ditandatangani dengan rahasia bersama. Penerbit dan pemverifikasi harus mengetahui rahasia tersebut — sesuai untuk layanan mikro dalam batas kepercayaan yang sama.
Rotasi Kunci HMAC
Lakukan rotasi kunci HMAC secara berkala. Selama rotasi, terima HMAC dengan kunci lama maupun baru dalam periode tumpang tindih yang singkat, lalu nonaktifkan kunci lama.
Kapan Menggunakan HMAC vs Tanda Tangan Digital
HMAC: simetris — kedua pihak berbagi rahasia, cepat, digunakan untuk API internal dan verifikasi webhook. Tanda tangan digital (RSA/ECDSA): asimetris — hanya penanda tangan yang memiliki kunci pribadi, dan siapa pun yang memiliki kunci publik dapat memverifikasinya; sesuai untuk JWT dalam sistem terdistribusi.
Pemeriksaan Cepat
Mengapa perbandingan HMAC harus menggunakan kesetaraan dengan waktu konstan?
Ringkasan
HMAC-SHA256 menyediakan integritas terautentikasi — membuktikan asal data dan bahwa data tidak dimanipulasi. Gunakan Mac.getInstance("HmacSHA256"). Selalu gunakan perbandingan dengan waktu konstan. Sertakan stempel waktu untuk mencegah serangan pemutaran ulang. Gunakan HMAC untuk penandatanganan API, verifikasi webhook, dan JWT HS256.
Belajar Java dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Pertanyaan yang Sering Diajukan
Apakah pelajaran “HMAC-SHA256 untuk Integritas Pesan” gratis?
Ya — teks lengkap “HMAC-SHA256 untuk Integritas Pesan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “HMAC-SHA256 untuk Integritas Pesan”?
Buat dan verifikasi tanda tangan HMAC-SHA256 untuk memastikan integritas payload API. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “HMAC-SHA256 untuk Integritas Pesan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Hash Kriptografis dengan MessageDigest
- Enkripsi Simetris AES
- HMAC-SHA256 untuk Integritas Pesan
- JWT: Struktur, Pembuatan, dan Verifikasi