# Generator HMAC-SHA256

Utwórz podpis HMAC-SHA256 na podstawie wiadomości i tajnego klucza. Narzędzie koduje oba elementy w UTF-8, stosuje konstrukcję HMAC z RFC 2104 z użyciem SHA-256 i zwraca tag o długości 256 bitów w zapisie szesnastkowym lub Base64. Programiści używają go do debugowania podpisów webhooków z usług takich jak Stripe, GitHub lub Slack, podpisywania żądań API i porównywania wyników z własnym kodem. Klucz nigdy nie jest zwracany ani zapisywany w logach.

## Najczęściej zadawane pytania

### Czym jest HMAC-SHA256?

HMAC-SHA256 to kod uwierzytelniania wiadomości zbudowany na podstawie SHA-256 i tajnego klucza, zgodnie z definicją w RFC 2104. Tylko osoba posiadająca klucz może obliczyć prawidłowy tag dla wiadomości. Wynik ma 32 bajty, czyli 64 znaki szesnastkowe.

### Jak zweryfikować podpis webhooka?

Wklej dokładną, surową treść żądania jako wiadomość, a swój tajny klucz podpisujący jako klucz, a następnie porównaj wynik z nagłówkiem podpisu. Wiele usług podpisuje połączenie kilku elementów, na przykład znacznik czasu Stripe, kropkę i treść żądania, więc przygotuj wiadomość zgodnie z dokumentacją danej usługi. Zmiana choćby jednego bajtu daje inny tag.

### Czy istnieje znany wektor testowy?

Przypadek testowy 2 z RFC 4231 wykorzystuje klucz Jefe i wiadomość what do ya want for nothing?, a oczekiwany wynik to 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. To narzędzie zwraca dokładnie tę wartość.

### Jak kodowane są klucz i wiadomość?

Oba elementy są kodowane jako tekst UTF-8. Jeśli Twój sekret jest podany w zapisie szesnastkowym lub Base64, jak ma to miejsce w niektórych usługach, bajty różnią się od widocznego tekstu, dlatego najpierw musisz zdekodować klucz we własnym kodzie. Spacje i znaki nowego wiersza są uwzględniane w obu polach.

### Czy mój tajny klucz jest przechowywany?

Nie. Klucz jest używany wyłącznie do obliczenia tagu podczas obsługi żądania. Nie jest dołączany do odpowiedzi, zapisywany w logach ani przechowywany.

### Czy klucz może być pusty lub bardzo długi?

HMAC akceptuje klucze o dowolnej długości, także pusty klucz. Klucze dłuższe niż 64 bajty są najpierw haszowane za pomocą SHA-256, zgodnie ze specyfikacją RFC. W praktyce wybieraj losowy klucz o długości co najmniej 32 bajtów.

### Wybrać zapis szesnastkowy czy Base64?

Użyj formatu przesyłanego przez drugą stronę. GitHub i Stripe używają zapisu szesnastkowego, natomiast Slack poprzedza zapis szesnastkowy ciągiem v0=, a wiele systemów opartych na AWS i JWT używa Base64. Oba formaty kodują te same 32 bajty.

### Czy HMAC-SHA256 daje to samo co SHA-256 połączonego klucza i wiadomości?

Nie. HMAC haszuje wiadomość dwukrotnie, używając wewnętrznych i zewnętrznych kluczy z dopełnieniem, co chroni przed atakami polegającymi na wydłużaniu wiadomości. Połączenie klucza i wiadomości, a następnie jednokrotne haszowanie daje inny, słabszy wynik.

### Jak porównywać podpisy w swoim kodzie?

Użyj funkcji porównującej w stałym czasie, takiej jak crypto.timingSafeEqual w Node.js lub hmac.compare_digest w Pythonie. Zwykłe porównanie ciągów znaków może ujawnić informacje czasowe dotyczące oczekiwanego tagu.

### Jak duża może być wiadomość?

Łączny rozmiar wiadomości i klucza może wynosić do 5 MiB tekstu. Wystarcza to na typowe ładunki webhooków i żądania API.

Twoja reklama tutaj?

[Napisz do nas](mailto:hi@dennn.is?subject=Reklama%20w%20OneClick%20Pro)

[Reklama Pakiet wtyczek gotowy do pracy z agentami dla WordPress.](https://sleekwp.com/?ref=oneclickpro)
