Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse des .NET MD5-Verschlüsselungs- und Entschlüsselungscodes

Analyse des .NET MD5-Verschlüsselungs- und Entschlüsselungscodes

高洛峰
高洛峰Original
2017-02-10 17:27:552303Durchsuche

Dieser Artikel analysiert hauptsächlich den .NET MD5-Verschlüsselungs- und Entschlüsselungscode im Detail, der einen gewissen Referenzwert hat

MD5-Einführung:

Es ermöglicht die „Komprimierung“ umfangreicher Informationen in ein vertrauliches Format (d. h. die Umwandlung einer Bytefolge beliebiger Länge in eine große Ganzzahl bestimmter Länge), bevor der private Schlüssel mit einer digitalen Signatursoftware signiert wird. Unabhängig davon, ob es sich um MD2, MD4 oder MD5 handelt, müssen alle eine zufällige Informationslänge erhalten und einen 128-Bit-Nachrichtenauszug generieren. Obwohl die Strukturen dieser Algorithmen mehr oder weniger ähnlich sind, unterscheidet sich das Design von MD2 völlig von MD4 und MD5. Das liegt daran, dass MD2 für 8-Bit-Computer entwickelt und optimiert wurde, während MD4 und MD5 für 32-Bit-Computer entwickelt wurden. Die Beschreibungen und der C-Quellcode dieser drei Algorithmen sind ausführlich in Internet RFCs 1321 beschrieben, dem maßgeblichsten Dokument, das Ronald L. Rivest im August 1992 der IETF vorgelegt hat.

Code:

string JiaMi = Md5Encrypt(LoginPwd);
    string JieMi = Md5Decrypt(JiaMi);

    #region MD5加密
    /// <summary>   
    /// MD5加密   
    /// </summary>   
    /// <param name="strSource">需要加密的字符串</param>   
    /// <returns>MD5加密后的字符串</returns>   
    public static string Md5Encrypt(string strSource)
    {
      //把字符串放到byte数组中   
      byte[] bytIn = System.Text.Encoding.Default.GetBytes(strSource);
      //建立加密对象的密钥和偏移量       
      byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量   
      byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥   
      //实例DES加密类   
      DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();
      mobjCryptoService.Key = iv;
      mobjCryptoService.IV = key;
      ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
      //实例MemoryStream流加密密文件   
      System.IO.MemoryStream ms = new System.IO.MemoryStream();
      CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
      cs.Write(bytIn, 0, bytIn.Length);
      cs.FlushFinalBlock();
      return System.Convert.ToBase64String(ms.ToArray());
    }
    #endregion


    #region MD5解密
    /// <summary>   
    /// MD5解密   
    /// </summary>   
    /// <param name="Source">需要解密的字符串</param>   
    /// <returns>MD5解密后的字符串</returns>   
    public static string Md5Decrypt(string Source)
    {
      //将解密字符串转换成字节数组   
      byte[] bytIn = System.Convert.FromBase64String(Source);
      //给出解密的密钥和偏移量,密钥和偏移量必须与加密时的密钥和偏移量相同   
      byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量   
      byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥   
      DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();
      mobjCryptoService.Key = iv;
      mobjCryptoService.IV = key;
      //实例流进行解密   
      System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);
      ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
      CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
      StreamReader strd = new StreamReader(cs, Encoding.Default);
      return strd.ReadToEnd();
    }
    #endregion

Eine weitere MD5-Verschlüsselungsmethode:

MD5-Verschlüsselung Einfach ausgedrückt Dabei wird eine bestimmte Operationsmethode verwendet, um den Chiffretext aus einem Stück Klartext zu finden. Beispiel: Der Klartext lautet: abcdefg Durch eine Reihe von Operationen wird der Chiffretext 7ac66c0f148de9519b8bd264312c4d64

erhalten. Er weist zwei Eigenschaften auf: 1. Keine Kollision, 2. Irreversibel.

Keine Kollision bedeutet:

7ac66c0f148de9519b8bd264312c4d64 Dieser Chiffretext kann nur aus dem abcdefg-Klartext abgerufen werden, mit Ausnahme anderer Klartexte. Nach der Verschlüsselung ändert sich sein Wert niemals gleich 7ac66c0f148de9519b8bd264312c4d64 sein, was bedeutet, dass keine zwei Klartexte nach der Verschlüsselung den gleichen Chiffretext erhalten.

Irreversibel bedeutet:

  Der Klartext wird verschlüsselt, um den Chiffretext zu erhalten, aber der Klartext kann nicht durch den Chiffretext erhalten werden. Das heißt, wenn wir wissen, dass der Klartext adcdefg verschlüsselt werden kann, können wir 7ac66c0f148de9519b8bd264312c4d64 erhalten. Wenn wir jedoch wissen, dass ein bestimmter Text verschlüsselt ist, können wir 7ac66c0f148de9519b8bd264312c4d64 erhalten, aber wir können 7ac66c0f148de9519b nicht berechnen 8bd264312c4 Wer hat diesen Text d64 verschlüsselt?

Das vom Benutzer festgelegte Passwort lautet abcdefg. Beim Speichern speichern wir den nach der Verschlüsselung von abcdefg erhaltenen Wert: 7ac66c0f148de9519b8bd264312c4d64. Wenn sich der Benutzer dann erneut anmeldet, gibt er das Passwort abcdefg ein Vergleichen wir, ob die beiden gleich sind?

Wir können den verschlüsselten Wert nicht in den vorverschlüsselten Wert umwandeln, daher besteht unser üblicher Ansatz darin, das eingegebene Passwort erneut zu verschlüsseln, wenn sich der Benutzer erneut anmeldet, und es mit dem in der Datenbank gespeicherten Wert zu vergleichen gleich sind, Das eingegebene Passwort ist korrekt.

Zitat erforderlich using System.Web.Security;

FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er zum Lernen aller beiträgt. Ich hoffe auch, dass jeder die PHP-Chinesisch-Website unterstützt.

Weitere Artikel zur .NET MD5-Verschlüsselungs- und Entschlüsselungscodeanalyse finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn