Berapa lama hash SHA256?


247

Saya akan SHA256menggunakan kata sandi + garam, tapi saya tidak tahu berapa lama waktu saya VARCHARmengatur database MySQL. Berapa panjang yang bagus?


9
Sebelum ada yang membaca ini memutuskan untuk mengikuti saran ini dan menggunakan SHA-*kata sandi hash, HARAP baca ini dulu .
— c00000fd

2
Kecuali jika Anda menggunakan SHA-256 pada kata sandi, yang seharusnya tidak Anda lakukan, hash memiliki panjang 256 bit, atau 64 karakter heksadesimal, atau 43 karakter alfanumerik, atau 32 byte.
— gak

Jawaban:


336

Panjang sha256 adalah 256 bit - seperti namanya.

Karena sha256 mengembalikan representasi heksadesimal, 4 bit cukup untuk menyandikan setiap karakter (bukan 8, seperti untuk ASCII), jadi 256 bit akan mewakili 64 karakter hex, oleh karena itu Anda memerlukan varchar(64), atau bahkan a char(64), karena panjangnya selalu sama , tidak berbeda sama sekali.

Dan demo:

$hash = hash('sha256', 'hello, world!');
var_dump($hash);

Akan memberimu :

$ php temp.php
string(64) "68e656b251e67e8358bef8483ab0d51c6619f3e7a1a9f0e75838d41ff368f728"

yaitu string dengan 64 karakter.


7
dapatkah kita menggunakan char (64) sebagai kunci utama atau akankah biner (32) lebih baik untuk itu? (access_token)
— frankish

3
Jika Anda berpikir Anda mungkin ingin memblokir pengguna di masa depan, maka saya sarankan menggunakan varchar(65)untuk memimpin !... hanya mengatakan.
— Manatax

105
... atau cukup tambahkan kolom 'diblokir'?
— Stijn de Witt

5
Karena Anda ingin memiliki garam berbeda untuk setiap kata sandi, Anda harus menyimpan ini di sebelah hash. Untuk ini, Anda dapat menggunakan bidang tambahan atau pra- / menambahkannya ke hash, sehingga Anda akan membutuhkan lebih dari 64 karakter
— Patrick Cornelissen

4
Anda dapat menggunakan pernyataan pilih ini untuk mengujinya:, SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))selalu ada berapa pun panjang string asli.
— DrAhmedJava

72

Opsi enkode untuk 256 bit SHA256:

  1. Base64: 6 bit per char = CHAR(44) termasuk karakter padding
  2. Hex: 4 bit per char = CHAR(64)
  3. Biner: 8 bit per byte = BINARY(32)

30
Base64 adalah 3 byte per 4 karakter, jadi meskipun 32 byte cocok dengan 43 karakter, Anda sebenarnya membutuhkan 44. Ekstra = ditambahkan sebagai karakter akhir
— Wilco

2
Nah, =bisa dilucuti dan ditambahkan kembali.
— Rick James

28

Saya lebih suka menggunakan BINARY (32) karena ini adalah cara yang dioptimalkan!

Anda dapat menempatkan 32 angka hex tersebut dari (00 hingga FF).

Karenanya BINARY (32)!


8
+1 - Saya suka dioptimalkan ... untuk siapa saja yang melakukan hal ini ... untuk menggunakan ini dengan MySQL ... yang dapat Anda gunakan UPDATE...SET hash_column=UNHEX(sha256HexString). Lalu, saat mengambilnya, Anda SELECT HEX(hash_column) AS hash_column.
— Kevin Nelson

22

Mengapa Anda membuatnya VARCHAR? Itu tidak bervariasi. Itu selalu 64 karakter, yang dapat ditentukan dengan memasukkan apa pun ke dalam salah satu kalkulator SHA-256 online .


apakah char (64) pernyataan mysql yang valid?
— Tony Stark

28
@hatorade: Tidak, ini bukan pernyataan, tapi ini adalah tipe kolom yang valid.
— Mark Byers

10
varchar juga tidak mengalokasikan ruang kecuali yang digunakan, tidak seperti char, ia mengalokasikan jumlah total karakter yang diizinkan terlepas dari apakah ada data yang mengisinya.
— Xenland

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.