Maison >développement back-end >tutoriel php >Analyse de l'algorithme de cryptage du mot de passe utilisateur PHP [Algorithme de cryptage Discuz]

Analyse de l'algorithme de cryptage du mot de passe utilisateur PHP [Algorithme de cryptage Discuz]

高洛峰
高洛峰original
2017-02-06 16:12:282102parcourir

L'exemple de cet article décrit l'algorithme de chiffrement du mot de passe utilisateur PHP. Je le partage avec vous pour votre référence. Les détails sont les suivants :

Aujourd'hui, lorsque j'utilisais Discuz pour un développement secondaire, j'avais besoin de vérifier le nom d'utilisateur et le mot de passe Discuz dans le code. est tombé dans un piège car le forum Discuz a Il existe deux tables pour stocker les données utilisateur, l'une se trouve dans le pre_common_member de la base de données Discuz ultrax et l'autre est stockée dans la table uc_members de la base de données UCenter ucenter. J'ai passé beaucoup de temps à étudier les données pre_common_member dans la bibliothèque ultrax et comment son mot de passe a été généré. En conséquence, j'ai cherché et trouvé un sel qui aurait été généré aléatoirement sur Internet

Je le pensais. a été généré aléatoirement. Comment le sel est-il vérifié lors de la connexion ? Ensuite, il a été dit en ligne que Discuz n'utilisait pas du tout ce mot de passe. Je l'ai testé moi-même, et bien sûr, même si je changeais le mot de passe utilisateur dans pre_common_member, je pouvais toujours me connecter normalement. du tout, ce qui m'a fait faire un grand détour.

D'accord, venons-en au fait. L'algorithme de cryptage de mot de passe de Discuz est en fait deux cryptages MD5. Tout d'abord, cryptez une fois avec du texte brut, puis générez un sel de manière aléatoire, puis ajoutez du sel après le premier texte chiffré sous forme de texte brut. . Effectuez à nouveau le cryptage MD5. Le sel est stocké dans la table uc_members et peut être obtenu par nom d'utilisateur.

Comme ceci :

MD5 (sel MD5 (texte brut))

Ce qui suit est le code d'implémentation de .net :

string GetDiscuzPWString(string sourceStr, string salt)
{
   return GetMd5Hash(string.Concat(GetMd5Hash(sourceStr),salt));
}
string GetMd5Hash(string input)
{
  MD5 md5Hasher = MD5.Create();
  byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
  StringBuilder sBuilder = new StringBuilder();
  for (int i = 0; i < data.Length; i++)
  {
    sBuilder.Append(data[i].ToString("x2"));
  }
  return sBuilder.ToString();
}

Résumé De la méthode de jugement des mots de passe :

① Pour installer UC

② Ouvrez la base de données et trouvez la table uc_members, cherchez le dernier champ "salt" et copiez la valeur à l'intérieur

③ Pseudo code :

$s=md5(md5("密码")."salt字段的值");
echo $s;

④ Utilisez SI pour juger

⑤ Répétez-le ! Ce nombre aléatoire est composé de 6 chiffres !

J'espère que cet article sera utile à tout le monde dans la programmation PHP.

Pour plus d'articles sur l'analyse de l'algorithme de cryptage des mots de passe des utilisateurs PHP [Algorithme de cryptage Discuz], veuillez faire attention au site Web chinois de PHP !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn