6
votes

Crypter le mot de passe avant de stocker dans la base de données?

J'ai un mot de passe étant passé de mon application iPhone à la base de données via un script php, utilisateur.php.

La variable $ passe passe par les éléments suivants: xxx

Comment puis-je crypter ceci avant qu'il ne soit inséré dans ma base de données? J'ai lu un peu sur les différentes techniques, mais à la recherche du meilleur moyen de gérer cela.

Merci à tout le monde.


3 commentaires

Non liée: Utilisez une entrée appropriée qui s'échappe et ne reposez pas sur str_replace pour filtrer toutes les apostrophes


Il vient d'une application iPhone, passée par URL au script.


Voir également l'openwall's Cadre de hachage PHP portable (PHPASS). Son durcit contre un certain nombre d'attaques communes sur les mots de passe utilisateur.


7 Réponses :


1
votes

la plus basique: hachage avec MD5 ou SHA1

$newpass = sha1($_REQUEST['pass']);


5 commentaires

@Chris pour l'enregistrement, le hachage est une forme de cryptage (bien qu'aubri vaccement). Quoi qu'il en soit, le MD5 ne devrait jamais être utilisé pour stocker des mots de passe. Avec les tables arc-en-ciel d'aujourd'hui, c'est aussi bien que sifflent.


Jamais dit que le hachage n'est pas une forme de cryptage, je viens de dire que MD5 n'est pas pour cryptage. Alors, pourquoi suggérez-vous d'utiliser MD5 pour "chiffrer" les mots de passe de l'OP. Au moins expliquer dans votre réponse, cela avant de créer un autre utilisateur avec un sens de la sécurité compliqué en utilisant MD5 pour le cryptage de mot de passe.


@Chris Vous ne voulez pas chiffrer les mots de passe, vous voulez les hacher. J'étais édition pour ajouter du salage, qui élimine la vulnérabilité de la table arc-en-ciel ... Bien que je soutiens toujours que si quelqu'un entre dans votre base de données pour obtenir les hachages, aucun cryptage ne va vous sauver. Je ne voudrais pas "crypter" des mots de passe parce que je ne les veux pas, et je ne veux pas qu'il y ait un moyen de les inverser.


A par mot de passe / sel d'utilisateur est une meilleure idée.


Je suis content de Just Sha1 Hashing. Ce n'est pas un système bancaire, juste un forum. Si quelqu'un veut vraiment pirater et obtenir les mots de passe, pas beaucoup, ils peuvent faire avec eux. J'ajoute de hachage pour fournir juste un peu de sécurité supplémentaire.



7
votes

Utilisez PHP's bibliothèque de crypte . MD5 n'est pas cryptage, il s'agit de hachage.

Aussi, sel vos mots de passe. Pourquoi?


0 commentaires

1
votes

0 commentaires

7
votes

Bien que la réponse ci-dessous soit techniquement correcte, PHP dispose de nouvelles recommandations concernant les algorithmes de hachage à utiliser. Licite recommandation , à partir de PHP> = 5.5. 0, est d'utiliser le Password_hash et Password_verify fonctions à hachage et vérifiez mots de passe hachés. En tant que prestation ajoutée, ces fonctions incluent automatiquement un sel individualisé dans le cadre du hachage retourné. Vous n'avez donc pas besoin de vous inquiéter de cela explicitement. Si vous ne vous souciez pas de récupérer la valeur réelle du mot de passe (à partir de la valeur cryptée de la base de données), vous pouvez exécuter un algorithme de hasch à sens unique (tel que SHA1). Cette fonction renvoie une chaîne de longueur spécifique (HASH) qui ne peut pas être utilisée pour trouver la chaîne d'origine (théoriquement). Il est possible que deux chaînes différentes puissent créer le même hachage (appelé une collision), mais cela ne devrait pas être un problème de mots de passe.
Exemple: $ passe = SHA1 ($ _ demande ['PASS']);

Une chose, pour en faire un peu plus en sécurité consiste à ajouter un sel au hasch et à exécuter la fonction de hachage à nouveau. Cela rend plus difficile de générer un mot de passe hydraulique par malveillance car la valeur de sel est manipulée uniquement du serveur.
Exemple: $ PASS = SHA1 (SHA1 ($ _ Demande ['Pass']). SHA1 ("MySalt @ $ # (%"));


2 commentaires

Ce n'est pas un bon sel. Un sel n'est pas le même pour chaque utilisateur d'une application. Au lieu de cela, il est spécifique à l'utilisateur.


J'ai utilisé celui-ci. Cela fonctionne et n'a pas besoin d'être super cryptique.



0
votes

Vous devez utiliser SHA1 sur HASH vos mots de passe pour stockage dans la base de données. C'est le moyen le plus simple et le plus efficace de stocker des mots de passe: xxx

C'est aussi exceptionnellement sûr. Bien que l'intégrité de ce soit commence à ramper, il est assez facile de mettre à niveau cette fonction sur SHA-256 (qui est incroyablement sécurisé).


2 commentaires

SHA1 est trop rapide. Voir le lien dans ma réponse.


@Middus C'est certainement trop rapide, mais il utilise 30% de plus d'espace que MD5. Au moins, au moins les tables sont plus grandes. De plus, si quelqu'un a suffisamment accès à votre base de données pour rassembler les mots de passe hachés, il est probable que elles puissent voler beaucoup d'autres informations non cryptées. SHA1 n'est pas "super", mais ça va faire dans 95% des scénarios.



0
votes

Pour savoir pourquoi MD5, SHA1 et leurs amis rapides pourraient ne pas être une bonne idée, vous devriez lire le message assez avec les tables arc-en-ciel: ce que vous devez savoir sur les schémas de mots de passe sécurisés par Thomas Ptacek. Le gist:

Enfin, nous avons appris que si nous voulons stocker des mots de passe en toute sécurité nous avons trois Options raisonnables: Schéma MD5 de PHK, Provos-Maziere's BCRYPT Schéma, et SRP. Nous avons appris que le bon Le choix est BCRYPT.

Remarque: c'est phk, pas php.


0 commentaires

2
votes

Tout d'abord, vous devez créer un sel d'utilisateur aléatoire. Ensuite, vous devez stocker cela et le hachage de mot de passe dans la base de données.

$user = query('SELECT * FROM `user` WHERE username = ?', array($_REQUEST['username']));

if($user)
{
    // If the password they give maches
    if($user->pass === sha1($user->salt. $_REQUEST['pass']))
    {
        // login
    }
    else
    {
        // bad password
    }
}
else
{
    // user not found
}


0 commentaires