SHA256 karma ne kadardır?


247

SHA256Bir şifre + tuz üzerinde çalışacağım , ancak VARCHARMySQL veritabanını kurarken ne kadar süre yapacağımı bilmiyorum . İyi uzunluk nedir?


9
Bunu okuyan herkes bu tavsiyeye uymaya ve SHA-*şifreleri karma olarak kullanmaya karar vermeden önce , lütfen önce bunu okuyun .
c00000fd

2
Yapmamanız gereken parolalarda SHA-256 kullanmadığınız sürece, karmaların uzunluğu 256 bit veya 64 onaltılık karakter veya 43 alfasayısal karakter veya 32 bayttır.
Caw

Yanıtlar:


335

Bir sha256 256 bit uzunluğundadır - adından da anlaşılacağı gibi.

Sha256 onaltılık bir gösterim döndürdüğünden, her karakteri kodlamak için 4 bit yeterlidir (ASCII için olduğu gibi 8 yerine), bu nedenle 256 bit 64 onaltılık karakteri temsil eder, bu nedenle uzunluk her zaman aynı olduğundan varchar(64)a veya hatta a gerekir. char(64), hiç de farklı değil.

Ve demo:

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

Sana vereceğim :

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

yani 64 karakterli bir dize.


7
birincil anahtar olarak char (64) kullanabilir miyiz yoksa ikili (32) bunun için daha iyi olur mu? (access_token)
frankish

3
Gelecekte bir kullanıcıyı engellemek isteyebileceğinizi düşünüyorsanız, varchar(65)önde gelen bir kişi için kullanmanızı öneririm !.
14'te Manatax

103
... ya da sadece 'engellenmiş' bir sütun mu eklemelisiniz?
Stijn de Witt

5
Her şifre için farklı bir tuz elde etmek istediğiniz için bunu karma yanında saklamanız gerekir. Bunun için fazladan bir alan kullanabilir veya hash'e önceden ekleyebilir / ekleyebilirsiniz, böylece 64'den fazla karaktere ihtiyacınız olacak
Patrick Cornelissen

4
test etmek için bu select deyimini kullanabilirsiniz: SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))orijinal dizenin uzunluğu ne olursa olsun her zaman 44'tür.
DrAhmedJava

72

SHA256'nın 256 biti için kodlama seçenekleri:

  1. Base64: karakter başına 6 bit = CHAR(44) dolgu karakteri dahil
  2. Onaltılı: karakter başına 4 bit = CHAR(64)
  3. İkili: Bayt başına 8 bit = BINARY(32)

30
Base64 4 karakter başına 3 bayttır, bu nedenle 32 bayt 43 karaktere sığsa bile, aslında 44'e ihtiyacınız vardır. Son karakter olarak bir ekstra = eklenir
Wilco

2
Peki, =sıyrılabilir ve yeniden eklenebilir.
Rick James

28

Optimize edilmiş bir yol olduğu için İKİLİ (32) kullanmayı tercih ediyorum!

(00 ila FF) arasındaki 32 onaltılık basamağa yerleştirebilirsiniz.

Bu nedenle İKİLİ (32)!


8
+1 - Optimize edilmiş ... bunu yapan herkese ... bunu MySQL ile kullanmak için ... kullanabilirsiniz UPDATE...SET hash_column=UNHEX(sha256HexString). Sonra onu alırken sen SELECT HEX(hash_column) AS hash_column.
Kevin Nelson


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.