Je vais exécuter SHA256un mot de passe + sel, mais je ne sais pas combien de temps pour créer ma VARCHARbase de données MySQL. Quelle est une bonne longueur?
Avant que quiconque lise ceci décide de suivre ces conseils et de les utiliser SHA-*pour hacher les mots de passe, VEUILLEZ lire ceci en premier .
c00000fd
2
À moins que vous n'utilisiez SHA-256 sur les mots de passe, ce que vous ne devriez pas faire, les hachages ont une longueur de 256 bits, ou 64 caractères hexadécimaux, ou 43 caractères alphanumériques, ou 32 octets.
caw
Réponses:
337
Un sha256 mesure 256 bits - comme son nom l'indique.
Puisque sha256 renvoie une représentation hexadécimale, 4 bits sont suffisants pour coder chaque caractère (au lieu de 8, comme pour ASCII), donc 256 bits représenteraient 64 caractères hexadécimaux, donc vous avez besoin d'un varchar(64), ou même d'un char(64), car la longueur est toujours la même , ne variant pas du tout.
pouvons-nous utiliser char (64) comme clé primaire ou le binaire (32) sera-t-il meilleur pour cela? (access_token)
franque
3
Si vous pensez que vous voudrez peut-être bloquer un utilisateur à l'avenir, je vous suggère d'utiliser varchar(65)pour un leader !... juste dire.
Manatax
105
... ou simplement ajouter une colonne "bloquée"?
Stijn de Witt
5
Comme vous voulez avoir un sel différent pour chaque mot de passe, vous devez le stocker à côté du hachage. Pour cela, vous pouvez utiliser un champ supplémentaire ou le pré- / l'ajouter au hachage, vous aurez donc besoin de plus de 64 caractères
Patrick Cornelissen
4
vous pouvez utiliser cette instruction select pour la tester: SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))elle est toujours égale à 44 quelle que soit la longueur de la chaîne d'origine.
DrAhmedJava
72
Options d'encodage pour les 256 bits du SHA256:
Base64: 6 bits par caractère = CHAR(44)y compris le caractère de remplissage
Base64 est de 3 octets pour 4 caractères, donc même si 32 octets correspondent à 43 caractères, vous avez en fait besoin de 44. Un extra = est ajouté comme caractère final
Wilco
2
Eh bien, le =peut être retiré et rajouté.
Rick James
28
Je préfère utiliser BINARY (32) car c'est la manière optimisée!
Vous pouvez placer dans ces 32 chiffres hexadécimaux de (00 à FF).
+1 - J'aime optimisé ... pour quiconque s'y passe ... pour l'utiliser avec MySQL ... vous pouvez utiliser UPDATE...SET hash_column=UNHEX(sha256HexString). Ensuite, lors de la récupération, vous SELECT HEX(hash_column) AS hash_column.
Kevin Nelson
22
Pourquoi voudriez-vous en faire VARCHAR? Cela ne varie pas. Il s'agit toujours de 64 caractères, qui peuvent être déterminés en exécutant n'importe quoi dans l' une des calculatrices SHA-256 en ligne .
@hatorade: Non, ce n'est pas une instruction, mais c'est un type de colonne valide.
Mark Byers
10
varchar n'alloue également pas d'espace à moins qu'il ne soit utilisé, contrairement à char, il alloue le nombre de caractères total autorisé, qu'il y ait ou non des données le remplissant.
Xenland
6
Il sera corrigé 64 caractères, donc utilisez char(64)
SHA-*
pour hacher les mots de passe, VEUILLEZ lire ceci en premier .Réponses:
Un sha256 mesure 256 bits - comme son nom l'indique.
Puisque sha256 renvoie une représentation hexadécimale, 4 bits sont suffisants pour coder chaque caractère (au lieu de 8, comme pour ASCII), donc 256 bits représenteraient 64 caractères hexadécimaux, donc vous avez besoin d'un
varchar(64)
, ou même d'unchar(64)
, car la longueur est toujours la même , ne variant pas du tout.Et la démo:
Te donnera :
c'est-à-dire une chaîne de 64 caractères.
la source
varchar(65)
pour un leader!
... juste dire.SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))
elle est toujours égale à 44 quelle que soit la longueur de la chaîne d'origine.Options d'encodage pour les 256 bits du SHA256:
CHAR(44)
y compris le caractère de remplissageCHAR(64)
BINARY(32)
la source
=
peut être retiré et rajouté.Je préfère utiliser BINARY (32) car c'est la manière optimisée!
Vous pouvez placer dans ces 32 chiffres hexadécimaux de (00 à FF).
Donc BINAIRE (32)!
la source
UPDATE...SET hash_column=UNHEX(sha256HexString)
. Ensuite, lors de la récupération, vousSELECT HEX(hash_column) AS hash_column
.Pourquoi voudriez-vous en faire VARCHAR? Cela ne varie pas. Il s'agit toujours de 64 caractères, qui peuvent être déterminés en exécutant n'importe quoi dans l' une des calculatrices SHA-256 en ligne .
la source
Il sera corrigé 64 caractères, donc utilisez
char(64)
la source
CHARACTER SET ascii
.