중국시가넷 - 개인 서명 - ASP.NET의 여러 가지 MD5 및 SHA1 암호화 방법

ASP.NET의 여러 가지 MD5 및 SHA1 암호화 방법

MD5의 전체 이름은 Message-Digest Algorithm 5(Message-Digest Algorithm)이며 1990년대 초 Mit Laboratory for Computer Science 및 Rsa Data Security Inc.에 의해 개발되었습니다. md2와 md3에 의해 개발되었으며 md4에서 개발되었습니다. 그 기능은 디지털 서명 소프트웨어로 개인 키에 서명하기 전에 대용량 정보를 기밀 형식으로 "압축"(즉, 임의 길이의 바이트 문자열을 특정 길이의 큰 정수로 변환)할 수 있도록 하는 것입니다. md2, md4 또는 md5인지에 관계없이 모두 임의의 길이의 정보를 얻고 128비트 정보 다이제스트를 생성해야 합니다.

암호화 해시 함수는 임의 길이의 바이너리 문자열을 고정 길이의 작은 바이너리 문자열로 매핑합니다. 암호화 해시 함수에는 동일한 값으로 해시되는 두 개의 서로 다른 입력을 찾는 것이 계산적으로 불가능하다는 속성이 있습니다. 즉, 두 데이터 세트의 해시 값은 해당 데이터도 일치하는 경우에만 찾을 수 있습니다. 데이터의 작은 변화로 인해 해시 값이 예측할 수 없을 정도로 많이 변경될 수 있습니다. 따라서 암호화된 텍스트에서 단서를 찾는 것이 어렵습니다.

SHA1의 전체 이름은 Secure Hash Algorithm(Secure Hash Algorithm)입니다.

MD5 알고리즘의 해시 값 크기는 128비트입니다. SHA1 알고리즘의 해시 값 크기는 160비트입니다. 두 알고리즘 모두 되돌릴 수 없습니다.

2004년 8월 17일 캘리포니아 산타바바라에서 열린 국제 암호동물학 컨퍼런스(Crypto'2004)에서 중국 산동대학교 왕샤오윈(Wang Xiaoyun) 교수가 MD5, HAVAL-128, MD4를 해독하는 데 획기적인 성과를 거두었습니다. RIPEMD 알고리즘 보고서는 MD 시리즈 알고리즘의 크래킹 결과를 발표했습니다. 세계에서 가장 난공불락의 암호 표준인 MD5의 요새가 무너졌다는 사실이 알려지면서 암호학계에 큰 소란이 일어났습니다. 하지만 우리가 일반 소프트웨어를 만들기에는 이 정도 수준의 암호화 보안이면 충분하다고 생각합니다.

우리가 일반적으로 가장 많이 사용하는 것은 사용자 비밀번호를 암호화하여 암호화된 비밀번호를 데이터베이스에 저장하는 것입니다. 비밀번호 비교 시에는 사용자가 입력한 비밀번호를 암호화한 후 데이터베이스에 있는 비밀번호와 비교합니다. 비교를 위한 텍스트입니다. ASP.net 클래스에서 암호화 알고리즘을 구현하는 방법에 대해서는 신경 쓸 필요가 없으며 사용 방법만 알면 됩니다.

다음은 ASP.NET의 여러 암호화 방법입니다. 위에서 언급한 MD5와 SHA1이라는 두 가지 암호화 알고리즘이 있습니다. 여기서 제시하는 예는 MD5입니다. SHA1은 거의 동일하지만 사용되는 클래스가 다릅니다.

MD5 관련 클래스:

코드는 다음과 같습니다:

System.Security.Cryptography.MD5

System.Security.Cryptography .MD5CryptoServiceProvider( )

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "MD5")

SHA1 관련 클래스:

코드는 다음과 같습니다. :

System.Security.Cryptography.SHA1

System.Security.Cryptography.SHA1CryptoServiceProvider()

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "SHA1")

p>

방법은 다음과 같습니다. (vs2005 사용)

코드는 다음과 같습니다.

/**//// lt; summarygt;

// / 방법 1: new 연산자를 사용하여 객체 생성

/// lt;/summarygt; lt; param name="strSource"gt; 암호화해야 하는 일반 텍스트

/// lt; 9번째부터 25번째까지의 암호화 결과를 반환합니다. 32비트 암호화 결과의 비트lt;/returnsgt;

public string Get_MD5_Method1(string strSource)

{

//new

System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider ()

//암호 텍스트 바이트 배열 가져오기

byte[] bytResult = md5.ComputeHash (System.Text.Encoding.Default.GetBytes(strSource))

//문자열로 변환하고 9~25자리를 취합니다.

string strResult = BitConverter.ToString(bytResult, 4, 8);

//문자열로 변환, 32비트

//string strResult = BitConverter.ToString(bytResult)

// BitConverter로 변환된 문자열은 각 문자 중간에 구분 기호를 생성하며, 이를 위해서는 Remove

strResult = strResult.Replace("-", "");

}

/* *//// lt; summarygt;

/// 방법 2: 다음을 호출하여 특정 암호화 알고리즘을 구현하는 개체를 만듭니다. 특정 암호화 알고리즘의 추상 클래스에 대한 Create 메서드.

코끼리.

/// lt;/summarygt;

/// lt;param name="strSource"gt;암호화해야 하는 일반 텍스트lt;/paramgt;

///lt; 32비트 암호화 결과를 반환합니다lt; /returnsgt; string strResult = "";

//생성

System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create(); >// UTF8, UTF7, 유니코드 등의 인코딩 선택에 주의하세요.

byte[] bytResult = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource))

p>

//Word 섹션 유형의 배열을 문자열로 변환

for (int i = 0; i lt; bytResult.Length; i)

{

//16 사전 시스템 변환

strResult = strResult bytResult[i].ToString("X")

}

return strResult; /p>

}

/**//// lt; summarygt;

/// 방법 3: HashPasswordForStoringInConfigFile을 직접 사용하여

/// lt;/summarygt;

/// lt;param name="strSource"gt;암호화해야 하는 일반 텍스트lt;/paramgt; lt;returnsgt;32비트 암호화 결과 반환lt; /returnsgt;

공개 문자열 Get_MD5_Method3(string strSource)

{

return System.Web.Security .FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "MD5");

}

이러한 암호화 기능은 서버 측에서 실행됩니다. 즉, 사용자가 비밀번호를 입력하면 사용자의 비밀번호는 클라이언트에서 서버로 전송될 때 어떠한 방식으로도 보호되지 않으므로 매우 위험합니다. 은행의 접근 방식은 클라이언트에 ActiveX 컨트롤을 설치하고 클라이언트의 일부 중요한 정보를 암호화한 다음 보내는 것입니다. 저는 이것을 어떻게 해야 할지 모르겠고, 이런 종류의 ActiveX 컨트롤을 만드는 방법을 배우고 싶습니다.