Comment utiliser AES_ENCRYPT correctement?

Je suis en train d'utiliser le chiffrement AES (AES_ENCRYPT dans MySQL) pour les mots de passe, mais je suis venu avec un tas de problèmes différents.

C'est la requête SQL que j'utilise pour enregistrer un nouvel utilisateur dans la base de données:

INSERT INTO user VALUES (
    '15',
    'John',
    'Doe',
    '123 Fake St.',
    AES_ENCRYPT('mypassword', 'mysalt'),
    'mysalt'
)

Où le sel est une chaîne de caractères aléatoires dans un cas réel.

Il fonctionne très bien. Je veux dire, je suis en mesure de récupérer le mot de passe original. Dans cet exemple, AES_DECRYPT(user.password, 'mysalt') WHERE user.id = 15 récupère mypassword. Mais j'ai peut-être oublié certaines choses.

  • Est-il sécuritaire pour enregistrer le sel avec le mot de passe? Hormis la sécurité par l'obscurité chose.
  • Quel est le meilleur format pour stocker le mot de passe haché? Je suis en utilisant
    VARBINARY mais la chaîne stockée ressemble 8�p�����_�Z�\.
  • Et enfin, combien de temps doit le mot de passe et durée de la
    le sel?

Grâce

Vous ne voulez pas crypter les mots de passe, vous voulez de hachage cryptographique avec une coûteuse de l'algorithme de comme PBKDF2, bcrypt, ou de scryptsecurity.stackexchange.com/a/6415/27154
J'ai posé cette question il y a longtemps. Aujourd'hui, j'utilise PHPass, qui utilise bcrypt si je me souviens bien.

OriginalL'auteur federico-t | 2012-04-02