310 votes

Quelle est la longueur du hachage SHA256 ?

Je vais courir SHA256 sur un mot de passe + sel, mais je ne sais pas combien de temps faire mon VARCHAR lors de la configuration de la base de données MySQL. Quelle est la bonne longueur ?

16 votes

Avant que quiconque lisant ceci ne décide de suivre ce conseil et d'utiliser SHA-* pour hacher les mots de passe, S'il vous plaît, lisez d'abord ceci .

4 votes

À moins que vous n'utilisiez SHA-256 pour 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.

0 votes

@c00000fd : Je ne suis pas sûr que le lien soit particulièrement pertinent. L'OP veut spécifiquement utiliser un 'mot de passe+salt'. Si le sel est composé de 16 caractères aléatoires, par exemple, alors il n'est pas important que SHA-256 soit "rapide", et les attaques par dictionnaire sont alors impossibles. Voir la documentation de gnu pour crypt pour le code d'exemple. SHA-x est parfait pour les phrases de passe, tant que vous savez ce que vous faites.

441voto

Pascal MARTIN Points 195780

Un sha256 est long de 256 bits -- comme son nom l'indique.

Étant donné que sha256 renvoie une représentation hexadécimale, 4 bits sont suffisants pour coder chaque caractère (au lieu de 8, comme pour l'ASCII), donc 256 bits représenteraient 64 caractères hexadécimaux, et il faut donc un fichier varchar(64) ou même un char(64) car la longueur est toujours la même, elle ne varie pas du tout.

Et la démo :

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

Vous donnera :

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

c'est-à-dire une chaîne de 64 caractères.

7 votes

Peut-on utiliser char(64) comme clé primaire ou binary(32) sera-t-il mieux pour cela ? (access_token)

4 votes

Si vous pensez vouloir bloquer un utilisateur à l'avenir, je vous suggère d'utiliser la méthode suivante varchar(65) pour un leader ! ... juste pour dire.

141 votes

...ou simplement ajouter une colonne 'bloqué' ?

35voto

marctrem Points 339

Je préfère utiliser BINARY(32) car c'est la méthode optimisée !

Vous pouvez placer dans ces 32 chiffres hexadécimaux de (00 à FF).

Par conséquent, BINARY(32) !

13 votes

+1 - J'aime bien l'optimisé... pour tous ceux qui sont sur ce sujet... pour utiliser ceci avec MySQL... vous pouvez utiliser UPDATE...SET hash_column=UNHEX(sha256HexString) . Ensuite, lorsque vous le récupérez, vous SELECT HEX(hash_column) AS hash_column .

0 votes

26voto

ceejayoz Points 85962

Pourquoi le rendre VARCHAR ? Il ne varie pas. C'est toujours 64 caractères, ce qui peut être déterminé en exécutant n'importe quoi dans un des calculateurs SHA-256 en ligne .

1 votes

Char(64) est-il une instruction mysql valide ?

31 votes

@hatorade : Non ce n'est pas une déclaration, mais c'est un type de colonne valide.

11 votes

Varchar n'alloue pas non plus 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 dans l'espace.

8voto

noushy Points 923

Il sera fixé à 64 caractères, donc utilisez **char(64)**

2 votes

Et utiliser CHARACTER SET ascii .

0voto

Travis Points 2502

Mauvais algorithme SHA, désolé. Il devrait être de 64 caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X