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.
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:
Base64: 6 bit per char = CHAR(44) termasuk karakter padding
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).
+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 .
@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
6
Ini akan diperbaiki 64 karakter, jadi gunakan char(64)
SHA-*
kata sandi hash, HARAP baca ini dulu .Jawaban:
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 achar(64)
, karena panjangnya selalu sama , tidak berbeda sama sekali.Dan demo:
Akan memberimu :
yaitu string dengan 64 karakter.
sumber
varchar(65)
untuk memimpin!
... hanya mengatakan.SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))
selalu ada berapa pun panjang string asli.Opsi enkode untuk 256 bit SHA256:
CHAR(44)
termasuk karakter paddingCHAR(64)
BINARY(32)
sumber
=
bisa dilucuti dan ditambahkan kembali.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)!
sumber
UPDATE...SET hash_column=UNHEX(sha256HexString)
. Lalu, saat mengambilnya, AndaSELECT HEX(hash_column) AS hash_column
.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 .
sumber
Ini akan diperbaiki 64 karakter, jadi gunakan
char(64)
sumber
CHARACTER SET ascii
.