집 >백엔드 개발 >C#.Net 튜토리얼 >.NET MD5 암호화 및 암호 해독 코드 분석
이 기사는 모든 사람을 위해 .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 중국어 웹사이트를 주목하세요!