>  기사  >  백엔드 개발  >  .NET MD5 암호화 및 암호 해독 코드 분석

.NET MD5 암호화 및 암호 해독 코드 분석

高洛峰
高洛峰원래의
2017-02-10 17:27:552239검색

이 기사는 모든 사람을 위해 .NET MD5 암호화 및 암호 해독 코드를 자세히 분석합니다. 관심 있는 친구는 이를 참조할 수 있습니다.

MD5 소개:

디지털 서명 소프트웨어로 개인 키에 서명하기 전에 대용량 정보를 기밀 형식으로 "압축"(즉, 임의 길이의 바이트 문자열을 특정 길이의 큰 정수로 변환)할 수 있습니다. MD2, MD4, MD5 등 모두 임의의 길이의 정보를 얻고 128비트 메시지 다이제스트를 생성해야 합니다. 이러한 알고리즘의 구조는 다소 유사하지만 MD2의 디자인은 MD4 및 MD5와 완전히 다릅니다. 이는 MD2가 8비트 컴퓨터용으로 설계되고 최적화된 반면 MD4 및 MD5는 32비트 컴퓨터용으로 설계되었기 때문입니다. 이 세 가지 알고리즘에 대한 설명과 C 언어 소스 코드는 1992년 8월 Ronald L. Rivest가 IETF에 제출한 가장 권위 있는 문서인 인터넷 RFC 1321에 자세히 설명되어 있습니다.

코드:

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

또 다른 MD5 암호화 방법:

MD5 암호화 단순 즉, 특정 연산 방법을 통해 암호문을 계산하는 데 일반 텍스트 조각이 사용됩니다. 예: 일반 텍스트는 다음과 같습니다. abcdefg 일련의 작업을 통해 암호문 7ac66c0f148de9519b8bd264312c4d64

가 얻어집니다. 1. 충돌 없음, 2. 되돌릴 수 없음.

충돌 없음은 다음을 의미합니다.

7ac66c0f148de9519b8bd264312c4d64 이 암호문은 다른 일반 텍스트를 제외하고 abcdefg 일반 텍스트에서만 얻을 수 있습니다. 암호화 후 해당 값은 7ac66c0f148de9519b8bd264312c4d64와 같을 수 없습니다. 이는 암호화 후 두 개의 일반 텍스트가 동일한 암호문을 얻지 않음을 의미합니다.

되돌릴 수 없다는 뜻은

  평문을 암호화하여 암호문을 얻으나 암호문을 통해서는 평문을 얻을 수 없다는 뜻이다. 즉, 일반 텍스트 adcdefg가 암호화될 수 있다는 것을 알면 7ac66c0f148de9519b8bd264312c4d64를 얻을 수 있지만 특정 텍스트가 암호화되어 있다는 것을 알면 7ac66c0f148de9519b8bd264312c4d64를 얻을 수 있지만 7ac66c0f148de9519b8을 계산할 수 없습니다. bd264312c4 이 문자 d64를 암호화한 사람은 누구입니까?

예를 들어 사용자가 설정한 비밀번호는 abcdefg이고 저장 시 abcdefg를 암호화한 후 얻은 값인 7ac66c0f148de9519b8bd264312c4d64를 저장합니다. 그런 다음 사용자가 다시 로그인하면 비밀번호 abcdefg를 입력하게 됩니다. 둘이 같은지 비교해볼까요?

암호화된 값을 사전에 암호화된 값으로 변환할 수 없으므로 일반적인 접근 방식은 사용자가 다시 로그인할 때 입력한 비밀번호를 다시 암호화하여 데이터베이스에 저장된 값과 비교하는 것입니다. 동일합니다. 입력한 비밀번호가 정확합니다.

인용 필요 using System.Web.Security;

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

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다.

.NET MD5 암호화 및 복호화 코드 분석과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.