Alat pembangun · SHA kalkulator cincang
Hex, Base64 dan Raw Bytes: Tiga Cara untuk Menulis SHA Digest Yang Sama
· Bagaimana ia berfungsi
sha-256 asas64 pengekodan format fail
sha256sum mencetak hex, package-lock.json menyimpan base64 dan Docker menggunakan awalan sha256:. Mereka semua boleh sama 32 bytes. Siaran ini menerangkan setiap perwakilan dan cara menukar antaranya.
Cincang yang kelihatan berbeza tetapi bersetuju — rentetan fail kunci dan jumlah semak terminal untuk fail yang sama
Cernaan SHA-256 pada asasnya adalah 32 bytes. Cara anda menulis bait tersebut menentukan rupa cernaan. Satu ringkasan, 32 bait yang sama, muncul sebagai 64 aksara heksadesimal (dua setiap bait), atau 44 aksara asas64 (kira-kira empat setiap tiga bait), atau panjang dan format yang berbeza bergantung pada pengekodan. Kekeliruan timbul kerana fail kunci mungkin menunjukkan satu perwakilan dan terminal menunjukkan yang lain, kedua-duanya untuk asas yang sama 32 bytes.
Memahami pengekodan ialah langkah yang bertukar "mengapa ini kelihatan berbeza?" ke dalam "Saya boleh mengesahkan mereka adalah sama." Ketiga-tiga perwakilan adalah setara sebaik sahaja anda menyahkodnya kembali kepada bait.
Ringkasan ialah bait — 20, 32, 48 atau 64 daripadanya bergantung pada algoritma, sebelum sebarang pengekodan teks
Sebelum sebarang perwakilan teks wujud, hasilnya ialah ArrayBuffer bait digest. ToolAcre membalut penimbal itu dengan Uint8Array, kemudian sama ada menulis setiap bait sebagai dua digit perenambelasan atau menukar setiap bait kepada aksara binari sebelum memanggil btoa. Tiada pemformat menjalankan semula cincangan dan tidak mengubah satu bit ringkasan tunggal.
Lebar bait mengikut algoritma yang dipilih dalam alat ini: SHA-1 mengembalikan dua puluh bait, SHA-256 tiga puluh dua, SHA-384 empat puluh lapan dan SHA-512 enam puluh empat. Itu adalah output yang disokong yang disahkan oleh metadata dan ujian algoritma. Bait mentah sesuai untuk perbandingan program; hex dan base64 ialah notasi pengangkutan untuk saluran yang mengharapkan teks.
Hex — dua aksara setiap bait, mengapa ia mendominasi alat baris arahan, dan soalan kes
Perwakilan heksadesimal menggunakan digit 0-9 dan huruf A-F (atau a-f) untuk mewakili 16 nilai yang mungkin bagi gigitan 4-bit. Dua digit heks mewakili satu bait. Ringkasan SHA-256 input abc ialah 32 bytes, jadi ia dipaparkan sebagai 64 aksara heks: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Ini ialah format yang paling banyak dicetak alat baris arahan. Heksadesimal boleh dibaca oleh manusia dan tidak jelas; setiap bait diwakili oleh dua aksara yang sama setiap kali.
Heksadesimal ialah format lalai untuk jumlah semak dan cincang dalam dokumentasi dan pada baris arahan. Ia mudah dibaca dan disalin, dan tiada pelapik, tiada sensitiviti huruf besar dalam tafsiran (walaupun konvensyen menentukan huruf kecil atau huruf besar secara konsisten), dan tiada aksara khas yang perlu dilarikan dalam URL atau JSON. Kelemahannya ialah ia memerlukan dua kali lebih banyak aksara daripada bait mentah, itulah sebabnya format lain wujud.
Base64 dan base64url — kira-kira empat aksara setiap tiga bait, padding dan tempat setiap satunya muncul (SRI, npm, SSH cap jari)
Base64 mengekod tiga bait sebagai empat aksara yang diambil daripada a 64-abjad aksara: A-Z, a-z, 0-9, +, /. Tiga bait 61 62 63 (yang ASCII kod untuk abc) mengekod sebagai YWJj dalam base64. A penuh 32-bait SHA-256 mencerna pengekodan sebagai lebih kurang 44 asas64 aksara. Padding dengan = aksara membawa panjang output kepada gandaan 4, jadi 44 watak tambah 0 padding (kerana 32 ialah gandaan daripada 3, tiada padding diperlukan). Penyahkodan membalikkan proses: empat aksara asas64 menyahkod kepada tiga bait.
Base64 muncul dalam package-lock.json fail, npm shrinkwrap, atribut SRI (Integriti Subsumber) dalam HTML dan SSH cap jari kekunci. Ia padat — lebih kurang 33% lebih panjang daripada bait mentah, berbanding 100% heksadesimal lebih lama. Pertimbangannya ialah tidak semua perwakilan teks sama-sama mudah dibaca; base64 kelihatan lebih kacau kepada mata manusia daripada hex.
Borang awalan — sha256: dalam ringkasan bekas, sha384- dalam atribut integriti, SHA256: dalam SSH
Base64url ialah varian yang ditakrifkan dalam RFC 4648 yang menggantikan - dan _ untuk + dan /. Abjad menjadi A-Z, a-z, 0-9, -, _. JWT menggunakan base64url kerana + dan / mempunyai makna istimewa dalam URL (+ boleh dibaca sebagai ruang dalam rentetan pertanyaan, / ialah pemisah laluan). Segmen JWT sentiasa dikodkan base64url dan penyahkod yang menegaskan asas64 standard akan menolaknya. Sebaliknya, penyahkod base64url yang tidak menerima abjad standard akan gagal pada base64 standard.
Padding adalah pilihan dalam base64url. Pad base64 standard dengan = untuk memastikan panjang output ialah gandaan 4. Base64url lazimnya mengetepikan padding kerana = itu sendiri URL-janggal. Penyahkod harus menerima base64url dengan atau tanpa padding, dan pengekod harus jelas tentang yang dihasilkannya. Alat ToolAcre base64 menerima kedua-dua abjad dan bertolak ansur dengan padding yang hilang pada input dan membolehkan anda memilih format pada output.
Contoh yang berfungsi — satu ringkasan ditukar daripada hex kepada base64 dan belakang, dengan sempadan bait ditandakan
Borang awalan menambah pengecam skema pada ringkasan. Pencernaan imej Docker menggunakan sha256:ba7816bf..., dengan sha256: ialah awalan. SSH cap jari menggunakan SHA256:, dengan titik bertindih. Sesetengah alat menggunakan sha256= atau SHA256= (dengan tanda sama). Awalan adalah maklumat semata-mata; ia memberitahu anda algoritma yang menghasilkan ringkasan. Mengalih keluar awalan meninggalkan bait yang sama dalam pengekodan yang sama.
Apabila membandingkan pencernaan, awalan ialah bunyi. Jika satu alat mencetak SHA256:ba78... dan satu lagi mencetak ba78..., ia adalah cernaan yang sama; awalan hanyalah metadata tentang format. Begitu juga, awalan seperti sha256:- (digunakan dalam beberapa konteks bekas) atau sha384- (digunakan dalam atribut integriti) ialah pemformatan konvensyen yang tidak mengubah bait. Tanggalkan mereka untuk perbandingan.
Perkara yang tidak dilindungi ini — pengekodan yang dipancarkan oleh alat tertentu; semak format output sebelum membandingkan
Satu penghadaman, iaitu SHA-256 daripada input abc, muncul dalam pelbagai bentuk: hex (64 aksara), base64 dengan padding (44 aksara), base64url dengan padding (44 aksara, dengan - dan _ bukannya + dan /), atau dengan pelbagai awalan. Untuk mengesahkan ia adalah sama, nyahkod setiap kembali kepada bait dan bandingkan bait. Perwakilan hex ba7816bf... menyahkod kepada bait 0xba 0x78 0x16 0xbf 0x8f 0x01 0xcf 0xea ... Perwakilan base64 bertukar kepada jujukan bait yang sama apabila dinyahkod.
Kalkulator cincang ToolAcre SHA mengeluarkan dalam perenambelasan secara lalai. Jika anda memerlukan base64, anda boleh menggunakan alat yang berasingan untuk menukar hex kepada base64, atau gunakan utiliti base64 di tapak yang sama untuk mengekod teks secara terus. Alat yang direka untuk konteks tertentu (npm untuk package-lock.json, Docker untuk ringkasan imej) output dalam format yang diharapkan oleh konteks mereka. Memahami bahawa ini semua adalah sama 32 bytes dalam pakaian yang berbeza menghilangkan kekeliruan apabila alat tidak bersetuju dengan format.
Bawa pulang: bandingkan bait, bukan rentetan — hitung ringkasan dengan kalkulator cincang ToolAcre SHA, kemudian tukar kepada perwakilan yang anda semak
Untuk menukar ringkasan heks kepada base64 secara manual, kumpulkan digit heks kepada bait, tukar setiap bait kepada perpuluhan, kemudian kod menggunakan abjad base64. Bait 0xba (hex ba) ialah perpuluhan 186; 0x78 ialah 120; 0x16 ialah 22; 0xbf ialah 191. Mengumpulkan empat bait dan pengekodan ini sebagai base64 memberikan aksara w (0 + 22 dalam abjad), sebagai (pengekodan 186), AA (pengekodan 120), vw (pengekodan 191). Intisari penuh memerlukan melakukan ini 10 kali dan pelapik jika perlu. Proses manual ini memberi pengajaran tetapi membosankan; alat penukar base64 menjadikannya segera.
Wawasan utama ialah ringkasan ialah bait dahulu, dan perwakilan teks adalah kedua. Setiap pengekodan bait yang sama menyahkod kembali kepada bait yang sama dan dengan itu boleh ditukar ganti untuk tujuan pengesahan integriti. Perbezaan kes dalam hex, perbezaan padding dalam base64, awalan dan jarak adalah semua pilihan pemformatan yang tidak menjejaskan nilai sebenar. Apabila anda menguasai keupayaan untuk menukar antara perwakilan, ketidakpadanan format cerna menjadi masalah penyahpepijatan yang boleh anda selesaikan dan bukannya misteri.