Maison  >  Article  >  développement back-end  >  Exemple d'analyse d'algorithme de cryptage de mot de passe utilisateur PHP

Exemple d'analyse d'algorithme de cryptage de mot de passe utilisateur PHP

墨辰丷
墨辰丷original
2018-06-01 10:00:121453parcourir

Cet article présente principalement l'algorithme de cryptage du mot de passe utilisateur PHP, analyse plus en détail le principe de l'algorithme de cryptage Discuz, compare la méthode d'implémentation de l'algorithme .net avec des exemples, et résume le processus et la méthode d'implémentation du cryptage utilisateur PHP. . Les amis dans le besoin peuvent se référer à

Aujourd'hui, lorsque j'utilisais Discuz pour le développement secondaire, je devais vérifier le nom d'utilisateur et le mot de passe Discuz dans le code, mais je suis accidentellement tombé dans un piège car le forum Discuz avait deux tables. . Pour stocker les données utilisateur, l'une se trouve dans pre_common_member dans la base de données ultrax de Discuz et l'autre est stockée dans la table uc_members dans la base de données ucenter d'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é. Après une recherche, j'ai trouvé un sel qui aurait été généré aléatoirement sur Internet

et j'ai réfléchi. à propos de ça Comment vérifier le sel généré aléatoirement 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(MD5(plaintext)+salt)

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 du mot de passe :

① Pour installer UC

② Ouvrez la base de données et trouvez la table uc_members, Trouvez 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 !

Résumé : ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Explication graphique détaillée de la fonction de mise en cache de la mémoire PHP memcached

php encapsulé cas de classe smarty

php classe smartyBC encapsulée

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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