Skip to content

Generator HMAC & Verifikator Tanda Tangan

Generator dan verifikator HMAC online gratis. Hitung HMAC-SHA256/SHA1/SHA384/SHA512 dengan kunci Teks, Hex, atau Base64 dan output Hex/Base64/Base64URL. 100% di browser Anda — kunci tidak pernah meninggalkan halaman.

Tanpa Pelacakan Berjalan di Browser Gratis
100% di browser Anda — pesan dan kunci rahasia Anda tidak pernah meninggalkan perangkat Anda.
HMAC yang Dihasilkan

Apa Itu HMAC?

HMAC (Hash-based Message Authentication Code) adalah tag pendek berpanjang-tetap yang membuktikan sebuah pesan tidak dimodifikasi sekaligus autentik — bahwa pesan itu dibuat oleh seseorang yang memegang kunci rahasia bersama. Didefinisikan di RFC 2104 dan FIPS 198-1, HMAC menggabungkan fungsi hash kriptografis apa pun dengan kunci rahasia dalam konstruksi bersarang spesifik, ditulis sebagai HMAC(K, m) = H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)). Hash dalam mengikat kunci ke pesan; hash luar membungkus hasilnya, dan itulah yang membuat HMAC tahan terhadap serangan length-extension yang memengaruhi fungsi SHA-1 dan SHA-256 mentah.

HMAC ada di mana-mana dalam infrastruktur web modern. Ia menandatangani webhook agar Anda dapat memastikan permintaan masuk benar-benar berasal dari GitHub, Stripe, Slack, atau Twilio dan bukan palsu. Ia menandatangani permintaan API (AWS Signature Version 4 dibangun di atas HMAC-SHA256) agar server dapat mengautentikasi pemanggil tanpa mengirim kata sandi lewat jaringan. Ia adalah S dalam HS256: sebuah JWT yang ditandatangani dengan HS256 membawa HMAC-SHA256 atas header dan payload-nya, yang dapat Anda periksa dengan encoder JWT. Ia juga menopang derivasi kunci TLS (HKDF), algoritma kata-sandi-sekali-pakai (HOTP/TOTP), dan integritas pesan di banyak sekali layanan internal.

Alat ini menghitung HMAC sepenuhnya di browser Anda memakai crypto.subtle.sign('HMAC', ...) dari Web Crypto API — primitif yang sama yang dipakai browser selama jabat tangan TLS. Kunci rahasia dan pesan Anda tidak pernah diunggah, jadi aman untuk rahasia penandatanganan produksi. Karena rahasia yang sama dapat dinyatakan sebagai teks mentah, hex, atau base64, alat ini membiarkan Anda memilih Pengodean kunci secara eksplisit, dan karena penyedia berbeda mengharapkan tag dalam bentuk berbeda, Anda dapat menghasilkan Hex, Base64, atau Base64URL. Tab Verifikasi memungkinkan Anda memeriksa tanda tangan yang Anda terima, memakai perbandingan waktu-konstan sehingga pemeriksaannya sendiri tidak membocorkan informasi waktu.

const crypto = require('crypto');

// HMAC-SHA256 with a UTF-8 text key, hex output
const hmac = crypto
  .createHmac('sha256', 'my-secret-key')
  .update('Hello, World!')
  .digest('hex');

console.log(hmac);
// → 'cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699'

// Verify a signature in constant time
function verify(message, key, expectedHex) {
  const actual = crypto.createHmac('sha256', key).update(message).digest();
  const expected = Buffer.from(expectedHex, 'hex');
  return actual.length === expected.length &&
    crypto.timingSafeEqual(actual, expected);
}

Fitur Utama

Menghasilkan dan memverifikasi dalam satu alat

Hasilkan tanda tangan di tab Hasilkan, atau tempelkan HMAC yang Diharapkan di tab Verifikasi untuk mengautentikasi webhook atau token yang masuk. Verifikasi memakai perbandingan waktu-konstan sehingga hasilnya tidak pernah membocorkan informasi waktu.

Pilih pengodean kunci

Tafsirkan rahasia Anda sebagai Teks (UTF-8), Heksadesimal, atau Base64. Inilah pengaturan yang dihilangkan kebanyakan alat lain — dan alasan paling umum dua sistem menghitung HMAC berbeda untuk kunci yang sama.

Tiga pengodean output

Keluarkan tag sebagai Hex (webhook GitHub, AWS), Base64 (Stripe, Twilio, banyak API), atau Base64URL (JWT dan token aman-URL) agar cocok dengan integrasi Anda tanpa konversi manual.

Empat algoritma native

HMAC-SHA256 secara default, ditambah SHA-1, SHA-384, dan SHA-512. Semua berjalan di Web Crypto API browser, jadi tidak ada pustaka kripto JavaScript yang perlu dipercaya dan tidak ada penalti performa.

100% sisi-klien dan privat

Kunci rahasia dan pesan Anda diproses sepenuhnya di browser dan tidak pernah dikirim ke server mana pun. Buka tab Network dan Anda akan melihat nol permintaan keluar — aman untuk rahasia penandatanganan produksi.

Komputasi langsung

HMAC dihitung ulang seketika saat Anda menyunting pesan, kunci, pengodean, atau algoritma — tanpa perjalanan tombol Hasilkan, sehingga Anda bisa bereksperimen dengan pengodean sampai nilai Anda cocok dengan milik server.

Dibangun di atas vektor teruji

Output divalidasi terhadap vektor uji HMAC RFC 4231 resmi, jadi Anda bisa percaya digest cocok dengan yang dihasilkan OpenSSL, modul crypto Node, dan pustaka hmac Python.

Contoh HMAC

Mulai cepat — HMAC-SHA256, output hex

Hello, World!
cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699

Dengan kunci "my-secret-key" (Pengodean kunci = Teks), algoritma HMAC-SHA256, dan Format output = Hex, pesan "Hello, World!" menghasilkan cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699. Ini adalah digest hex 64-karakter kanonik yang Anda peroleh dari crypto.createHmac('sha256', key).update(msg).digest('hex') milik Node.

Verifikasi webhook gaya Stripe (output Base64)

{"id":42,"event":"user.created"}
Cd2f7zTKaJFeG6k+t1FcvDPn51OAZ2f4GrxkCUgMhGs=

Banyak penyedia webhook mengirim tanda tangan sebagai Base64. Dengan kunci "whsec_test_secret" (Teks), HMAC-SHA256, dan Format output = Base64, body JSON tersebut ditandatangani menjadi Cd2f7zTKaJFeG6k+t1FcvDPn51OAZ2f4GrxkCUgMhGs=. Tempelkan nilai itu ke tab Verifikasi untuk memastikan permintaan benar-benar berasal dari penyedia Anda sebelum memprosesnya. Secara internal HMAC berjalan di atas primitif yang sama dengan generator hash SHA-256 kami, tetapi dengan kunci rahasia Anda.

Vektor referensi RFC 4231

what do ya want for nothing?
5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843

Ini adalah kasus uji 2 dari RFC 4231, dokumen vektor-uji HMAC resmi. Dengan kunci "Jefe" (Teks), HMAC-SHA256, output Hex, pesan "what do ya want for nothing?" menghasilkan 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Mencocokkan nilai persis ini adalah cara Anda membuktikan implementasi HMAC sudah benar.

HMAC-SHA512 untuk digest yang lebih panjang

The quick brown fox
36f44b125a8a90639dc46733039571792e081e0fd8685ff746784b02ed14aa35629d562c7117cde4a701570551faa5a5e1b7ef1eb5c3bcd4cc1fdb8923fcf14e

Ganti algoritma ke HMAC-SHA512 untuk digest 128-karakter (512-bit). Dengan kunci "key" (Teks) dan output Hex, "The quick brown fox" menghasilkan nilai di atas. SHA-512 lebih cepat daripada SHA-256 di sebagian besar perangkat keras 64-bit dan memberi output lebih besar, meski SHA-256 tetap menjadi default interoperabilitas.

Cara Menghasilkan & Memverifikasi HMAC

  1. 1

    Pilih algoritma

    Pilih HMAC-SHA256 (default dan pilihan tepat untuk hampir semua webhook, API, dan JWT), atau beralih ke SHA-1, SHA-384, atau SHA-512 agar cocok dengan sistem yang membutuhkannya. Keempatnya berjalan native di browser Anda lewat Web Crypto API.

  2. 2

    Masukkan kunci rahasia dan atur pengodeannya

    Ketik atau tempelkan kunci rahasia Anda, lalu atur Pengodean kunci agar cocok dengan cara server menafsirkannya: Teks (UTF-8) untuk string biasa, Hex untuk blob heksadesimal, atau Base64 untuk rahasia base64. Salah di sini adalah penyebab utama HMAC tidak cocok, jadi saat ragu cobalah ketiganya.

  3. 3

    Masukkan pesan

    Tempelkan byte persis yang ingin Anda tandatangani — untuk webhook ini adalah body permintaan mentah, byte-per-byte, tanpa serialisasi ulang atau perubahan spasi. HMAC dihitung ulang langsung saat Anda menyunting, tanpa apa pun yang dikirim ke server.

  4. 4

    Pilih format output dan salin

    Pilih Hex (gaya GitHub), Base64 (gaya Stripe/AWS), atau Base64URL (gaya JWT) agar cocok dengan yang diharapkan integrasi Anda, lalu klik Salin untuk mengambil tanda tangannya.

  5. 5

    Verifikasi tanda tangan yang ada

    Beralih ke tab Verifikasi, tempelkan HMAC yang Diharapkan dari sebuah header atau token, dan alat memastikan dalam waktu konstan apakah tanda tangan yang Anda hitung cocok — sehingga Anda dapat mengautentikasi payload sebelum bertindak atasnya.

Kesalahan HMAC yang Umum

Pengodean kunci tidak cocok (penyebab #1 ketidakcocokan)

Rahasia yang sama dapat dibaca sebagai teks UTF-8 mentah, sebagai hex, atau sebagai base64 — dan setiap tafsiran menghasilkan byte kunci yang sepenuhnya berbeda, sehingga HMAC tidak akan cocok jika alat Anda dan server tidak sepakat. Jika penyedia memberi Anda rahasia hex atau base64, Anda harus mendekodenya ke byte sebelum penandatanganan, bukan menandatangani string apa adanya. Saat tanda tangan gagal diverifikasi, coba kunci di bawah ketiga opsi Pengodean kunci terlebih dahulu.

✗ Salah
// Server stored a base64 secret but you sign the literal string
createHmac('sha256', 'c2VjcmV0LWtleQ==').update(msg)
✓ Benar
// Decode the base64 secret to raw bytes first
createHmac('sha256', Buffer.from('c2VjcmV0LWtleQ==', 'base64')).update(msg)

Pengodean output tidak cocok

HMAC adalah byte mentah; hex, base64, dan base64url hanyalah pengodean teks berbeda dari nilai yang sama. Jika server mengirim tanda tangan base64 dan Anda membandingkannya dengan digest hex Anda, keduanya tidak akan pernah cocok meski byte dasarnya identik. Cocokkan Format output dengan yang dipakai header atau token.

✗ Salah
// Provider sends base64, you compare hex
expected = 'Cd2f7z...=' // base64
actual   = digest('hex') // hex — never matches
✓ Benar
// Produce the same encoding the provider uses
actual = digest('base64')

Menandatangani JSON yang diserialisasi ulang alih-alih body mentah

Tanda tangan webhook mencakup byte persis yang dikirim penyedia. Jika Anda mem-parse JSON dan men-stringify ulang, urutan kunci, spasi, dan format angka bisa berubah, mengubah byte dan merusak tanda tangan. Selalu HMAC-kan body permintaan mentah yang ditangkap sebelum parsing apa pun.

✗ Salah
// Re-serialization changes the bytes
body = JSON.stringify(JSON.parse(rawBody))
verify(hmac(body))
✓ Benar
// Sign the raw bytes exactly as received
verify(hmac(rawBody))

Memakai == alih-alih perbandingan waktu-konstan

Membandingkan tanda tangan yang diterima dengan == atau kesetaraan string sederhana membocorkan informasi waktu, karena perbandingan berhenti pada byte pertama yang berbeda. Melalui banyak percobaan penyerang dapat memulihkan tag yang valid. Selalu gunakan pemeriksaan kesetaraan waktu-konstan saat memverifikasi.

✗ Salah
if (received === computed) { /* trust */ }
✓ Benar
if (crypto.timingSafeEqual(receivedBuf, computedBuf)) { /* trust */ }

Untuk Apa HMAC Digunakan

Verifikasi tanda tangan webhook
Penyedia seperti GitHub, Stripe, Slack, dan Twilio menandatangani setiap webhook dengan HMAC atas body permintaan dan rahasia yang hanya Anda bagikan. Hitung ulang tag dan bandingkan dengan header (misalnya X-Hub-Signature-256) untuk memastikan event itu asli sebelum Anda bertindak atasnya. Gunakan tab Verifikasi untuk melakukan ini tanpa menulis kode sekali-pakai.
Tandatangani permintaan API
API terautentikasi sering mewajibkan klien untuk menandatangani permintaan dengan HMAC (metode, path, timestamp, body) memakai rahasia bersama alih-alih mengirim rahasia itu sendiri. AWS Signature Version 4 adalah contoh kanoniknya. Alat ini membiarkan Anda mereproduksi dan men-debug tanda tangan itu langkah demi langkah.
Jamin integritas pesan
Saat Anda melewatkan token, cookie, atau pesan antar layanan, melampirkan HMAC membuat penerima dapat mendeteksi perusakan apa pun. Karena tag bergantung pada rahasia, penyerang tidak dapat menghitung ulangnya setelah memodifikasi data — berbeda dari checksum biasa.
Pahami penandatanganan JWT HS256
JWT yang ditandatangani dengan HS256 hanyalah base64url(header) + '.' + base64url(payload), ditandatangani dengan HMAC-SHA256 dan hasilnya dikeluarkan sebagai Base64URL. Atur algoritma ke SHA-256 dan output ke Base64URL di sini untuk melihat persis bagaimana tanda tangan itu dihasilkan, lalu periksa silang di encoder JWT.
Debug tanda tangan yang tidak cocok
Saat HMAC Anda tidak mau cocok dengan milik server, alat ini adalah cara tercepat untuk mengisolasi penyebabnya: coba kunci sebagai Teks, Hex, dan Base64, ganti output antara Hex dan Base64, dan pastikan Anda menandatangani byte mentah yang persis — semua tanpa men-deploy ulang kode apa pun.

Cara Kerja HMAC

Konstruksi RFC 2104
HMAC didefinisikan sebagai H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)), di mana ipad adalah byte 0x36 yang diulang dan opad adalah 0x5c yang diulang, keduanya sampai ukuran blok hash. Kunci lebih panjang dari ukuran blok di-hash dulu; kunci lebih pendek diisi-nol. Penyaringan dua-tahap ini yang memberi HMAC bukti keamanannya, yang berlaku bahkan jika hash dasar tidak tahan-tabrakan.
Mengapa hash berkunci mengalahkan hash biasa
Hash biasa hanya membuktikan bahwa data tidak rusak secara tak sengaja, karena siapa pun dapat menghitung ulangnya untuk pesan apa pun — termasuk yang sudah dirusak. HMAC menyertakan rahasia, sehingga hanya pemegang kunci yang dapat menghasilkan tag valid. Itu mengubah integritas-saja menjadi integritas plus keaslian, yang merupakan properti yang sebenarnya dibutuhkan webhook dan permintaan bertanda tangan.
Ketahanan length-extension
SHA-1, SHA-256, dan SHA-512 telanjang adalah hash Merkle–Damgård yang rentan terhadap length-extension: diberi H(secret ‖ msg), penyerang dapat menghitung H(secret ‖ msg ‖ extra) tanpa mengetahui rahasianya. Skema 'MAC prefiks-rahasia' yang naif dipatahkan oleh ini. Hash luar HMAC menetralkan serangan tersebut, yang merupakan alasan utama memakai HMAC alih-alih menghash rahasia dan pesan bersama.
Memilih SHA-256 vs SHA-512
HMAC-SHA256 menghasilkan tag 256-bit (64 karakter hex) dan merupakan default interoperabilitas — cepat, ada di mana-mana, dan didukung di semua tempat. HMAC-SHA512 menghasilkan tag 512-bit (128 karakter hex) dan sering lebih cepat di CPU 64-bit karena SHA-512 memakai kata 64-bit. Pilih SHA-256 kecuali sebuah spesifikasi atau sistem rekan membutuhkan SHA-512; keduanya aman untuk autentikasi.
Implementasi Web Crypto
Alat ini memanggil crypto.subtle.importKey untuk memuat kunci Anda (didekode dari Teks, Hex, atau Base64) dan crypto.subtle.sign('HMAC', ...) untuk menghitung tag, lalu mengodekan byte mentah sebagai Hex, Base64, atau Base64URL. Ini adalah implementasi native dan teraudit yang sama yang dipakai browser untuk TLS, berjalan di luar mesin JavaScript demi kecepatan.

Praktik Terbaik HMAC

Gunakan kunci setidaknya sepanjang output hash
Untuk HMAC-SHA256 gunakan rahasia minimal 32 byte acak (256 bit); untuk SHA-512 gunakan 64. Kunci yang pendek atau ber-entropi rendah adalah mata rantai terlemah. Hasilkan kunci dari sumber acak yang aman secara kriptografis — jangan pernah dari kata sandi atau string yang dapat ditebak.
Selalu bandingkan tag dalam waktu konstan
Verifikasi tanda tangan dengan perbandingan waktu-konstan (crypto.timingSafeEqual di Node, hmac.compare_digest di Python) alih-alih == atau kesetaraan string. Perbandingan naif kembali lebih awal pada byte pertama yang berbeda, membocorkan waktu yang dapat membuat penyerang memulihkan tag valid byte demi byte. Tab Verifikasi alat ini sudah membandingkan dalam waktu konstan.
Jangan pernah mencatat atau membocorkan kunci rahasia
Jauhkan rahasia penandatanganan dari log, pesan kesalahan, URL, dan kode sisi-klien. Simpan di pengelola rahasia atau variabel lingkungan, putar secara berkala, dan batasi setiap integrasi ke kuncinya sendiri agar satu kebocoran tidak mengompromikan segalanya.
Utamakan HMAC-SHA256 atau yang lebih kuat
Default ke HMAC-SHA256; naik ke SHA-384 atau SHA-512 saat rekan membutuhkannya. Hindari HMAC-SHA1 untuk sistem baru dan jangan pernah memakai HMAC-MD5. Meski HMAC mentolerir hash yang lebih lemah lebih baik daripada tanda tangan mentah, memulai dari hash modern memberi Anda margin terbanyak.
Tandatangani byte yang persis, termasuk timestamp
Tandatangani payload mentah yang tidak dimodifikasi — serialisasi ulang JSON atau memangkas spasi mengubah byte dan merusak verifikasi. Untuk penandatanganan permintaan, sertakan timestamp atau nonce dalam data yang ditandatangani dan tolak tanda tangan basi untuk mencegah serangan ulang (replay).

FAQ HMAC

Apa itu HMAC?
HMAC (Hash-based Message Authentication Code) adalah cara membuktikan integritas sekaligus keaslian sebuah pesan menggunakan kunci rahasia bersama. Anda memasukkan pesan dan kunci rahasia ke dalam fungsi hash (di sini SHA-1, SHA-256, SHA-384, atau SHA-512) dengan konstruksi bersarang spesifik yang didefinisikan RFC 2104, dan Anda mendapatkan tag panjang-tetap. Siapa pun yang tahu rahasianya dapat menghitung ulang tag tersebut dan memastikan pesan tidak diubah dan berasal dari seseorang yang memegang kunci. Inilah mekanisme standar di balik tanda tangan webhook, permintaan API bertanda tangan, dan keluarga HS256 dari token JWT.
Apa beda HMAC dengan hash biasa seperti SHA-256?
Hash biasa seperti SHA-256 hanya membuktikan integritas: siapa pun bisa menghitung ulangnya, sehingga siapa pun juga bisa memalsukan hash yang cocok untuk pesan yang sudah dirusak. HMAC menyertakan kunci rahasia, sehingga hanya pihak yang memegang kunci itu yang dapat menghasilkan atau memverifikasi tag yang valid — itu menambahkan keaslian di atas integritas. HMAC juga memakai konstruksi dua-tahap bersarang (hashing dalam dan luar dengan pad turunan-kunci) yang membuatnya kebal terhadap serangan length-extension yang memengaruhi SHA-1 dan SHA-256 mentah. Singkatnya: gunakan hash untuk mendeteksi kerusakan tak sengaja, gunakan HMAC untuk mendeteksi perusakan sengaja oleh penyerang yang tidak tahu kunci Anda.
Bagaimana cara memverifikasi tanda tangan webhook yang masuk?
Ambil body permintaan mentah persis seperti yang diterima (jangan serialisasi ulang JSON — bahkan urutan kunci yang berubah merusak tanda tangan), pilih algoritma yang sama dengan penyedia Anda (biasanya HMAC-SHA256), masukkan rahasia penandatangan dengan Pengodean kunci yang benar, dan atur Format output agar cocok dengan header (Hex untuk prefiks sha256= milik GitHub, Base64 untuk header gaya Stripe/Twilio). Lalu buka tab Verifikasi, tempelkan tanda tangan dari header (seperti X-Hub-Signature-256), dan alat melaporkan cocok atau tidak menggunakan perbandingan waktu-konstan. Percayai payload hanya jika cocok.
Pengodean kunci dan output mana yang dipakai server saya?
Tidak ada jawaban universal — itu bergantung pada penyedia Anda, dan persis itulah sebabnya alat ini mengekspos keduanya sebagai pilihan eksplisit. Pola umum: GitHub memakai rahasia teks UTF-8 dan output hex huruf kecil dengan prefiks sha256=; Stripe memakai rahasia teks dan base64; AWS Signature V4 memakai kunci biner turunan dan hex; banyak sistem internal memberi rahasia base64 atau hex yang harus didekode ke byte mentah sebelum penandatanganan. Jika HMAC Anda tidak cocok, pengodean hampir selalu jadi penyebabnya — coba kunci yang sama di bawah Teks, Hex, dan Base64 untuk menemukan tafsiran yang diharapkan server.
Apakah HMAC-SHA256 aman?
Ya. HMAC-SHA256 dianggap luas sebagai aman dan merupakan default yang direkomendasikan untuk autentikasi pesan. Keamanannya berasal dari konstruksi HMAC ditambah hash yang kuat, dan ia tetap aman meski ada serangan tabrakan terhadap hash telanjang — HMAC tidak bergantung pada ketahanan-tabrakan seperti tanda tangan digital. Risiko dunia nyata bersifat operasional, bukan algoritmik: kunci rahasia yang lemah atau bocor, mencatat kunci di log, atau memakai perbandingan yang bukan waktu-konstan. Gunakan kunci acak yang panjang dan bandingkan tag dalam waktu konstan, maka HMAC-SHA256 akan bertahan.
Mengapa tidak ada HMAC-MD5 atau HMAC-SHA-3 di sini?
Memang disengaja. Alat ini hanya mengekspos SHA-1, SHA-256, SHA-384, dan SHA-512 karena itulah fungsi hash yang didukung Web Crypto API native browser, yang menjaga semuanya tetap cepat dan sepenuhnya sisi-klien tanpa pustaka tambahan. HMAC-MD5 dihilangkan karena MD5 usang dan Anda tidak boleh memulai sistem baru dengannya. HMAC-SHA-3 dihilangkan karena Web Crypto tidak mengimplementasikan SHA-3; menambahkannya akan memerlukan pengiriman polyfill JavaScript. Untuk hampir semua kasus penggunaan modern, HMAC-SHA256 toh adalah pilihan yang tepat.
HS256 (HMAC) vs RS256 (RSA) — mana yang harus saya pakai untuk JWT?
HS256 menandatangani dan memverifikasi JWT dengan satu rahasia bersama memakai HMAC-SHA256, sedangkan RS256 menandatangani dengan kunci privat RSA dan memverifikasi dengan kunci publik yang cocok. Gunakan HS256 saat satu pihak menerbitkan sekaligus memvalidasi token (sebuah monolit, atau layanan internal tepercaya yang aman berbagi rahasia) — lebih sederhana dan lebih cepat. Gunakan RS256 saat pihak ketiga atau banyak layanan harus memverifikasi token tetapi tidak boleh bisa mencetaknya, karena Anda hanya membagikan kunci publik. Anda dapat menjelajahi struktur terenkode keduanya di encoder JWT; tanda tangan HS256 persis adalah HMAC-SHA256 atas header dan payload.