2013-02-13 3 views
0

나는 암호를 암호화하고 다음과 같이 데이터베이스에 저장하는 데 사용되는 방법이 있습니다암호 해독 방법

public static string Md5Encrypted(string password) 
     { 
      byte[] pass = Encoding.UTF8.GetBytes(password); 
      MD5 md5 = new MD5CryptoServiceProvider(); 
      string strPassword = Encoding.UTF8.GetString(md5.ComputeHash(pass)); 
      return strPassword; 
     } 

지금 내가했다 데이터베이스에서 얻을 암호를 decrypt 방법을 원하는을 위의 방법으로 암호화하여 저장합니다. 나는 그것을 어떻게 만드는지 모른다. 아무도 나 좀 도와 줄 수 없어?

+2

MD5로 암호화하지 않습니다. 돌이킬 수없는 해시를 생성 중입니다. 주어진 암호의 해시를 생성하여 암호를 비교하고 저장된 해시와 비교해야합니다. –

+0

이 방법을 바꾸는 유일한 방법은 올바른 비밀번호를 추측하는 것입니다. 이것은 좋은 암호 해쉬 btw 두 가지 이유 : 1) 소금 없음 2) MD5가 빠릅니다. 대신 PBKDF2, bcrypt 또는 scrypt를 사용해야합니다. – CodesInChaos

+0

@RanhiruCooray 아니, 나는 가지 않는다. 새 암호화 된 암호를 이전 암호와 비교할 때 암호가 이미 데이터베이스에 저장되어 있으면 암호가 일치하면 true가 반환되지 않습니다. ? 주변의 사각형으로 변경됩니까? – Dev

답변

3

MD5는 해시 함수 (암호화가 아님)이며 되돌릴 수 없습니다. 즉, 지정된 해시에서 원래 값을 계산할 수 없습니다.

업데이트 : 암호 해시를 안전하게 저장하는 방법을 설명하는이 기사를 권장합니다. C# 구현도 있습니다. 그런 다음 이렇게 로그인시 사용자 이름과 암호를 확인하려면

http://crackstation.net/hashing-security.htm

+0

그러나 실제로는 많은 후보 암호를 추측하여 되돌릴 수 있습니다. 이는 실제로 잘 작동합니다. – CodesInChaos

+0

그래서 새로운 암호화 된 암호를 이전 암호와 비교할 때 암호가 일치하면 true가 반환되지 않습니다. ? – Dev

+0

기술적으로, 해싱을 뒤집지는 않지만 충돌을 일으키는 것은 아닙니다. 결국 그것은 대부분의 실제적인 목적을 위해 동일합니다. 그래서 소금에 절인 해시를 저장하고 PBKDF2와 같은 것을 사용합니다. –

0

MD5 해시 함수는 돌이킬 수 및 해독 할 수 없습니다 ..

1.While registering a new user, Hash the password and store it in database. 

2.During login,Hash the password entered by the user 

3.Now,Compare the password entered(Hashed) with password stored in database(Hashed) 

4.If both of them are same then allow user to login else display an error 
+2

"암호화"라고하지 마십시오. –

+0

@AndreLoker 그러면 전화가 뭐지 .. – coder

+0

해싱. 암호의 해시를 만듭니다. –

0

당신이 암호를 해독 할 수 없기 때문에 해시는 단방향 함수이므로 해시 값을 가져 와서 원래 값으로 되돌릴 수는 없습니다.

암호를 다루고있는 것처럼 보이므로이 암호는 일종의 로그온 메커니즘이라고 가정하기 때문에 (아마도) 정상입니다. 당신이해야 할 일은 패스워드를 해쉬하고 (사용자가 해왔 던 것처럼), 사용자가 웹 사이트에 등록 할 때 해싱 된 값을 저장하는 것입니다. 사용자가 사이트로 돌아 오면 입력 한 암호를 가져 와서 해시하고 (동일한 방법 사용) 해시 된 값과 저장 한 값을 비교합니다. 두 해시가 일치하면 올바른 암호가 입력됩니다.

소금
같은 입력 값이 항상 동일한 해시 값 (그렇지 않으면 로그온 위의 메커니즘이 작동하지 않을 것입니다)를 생산한다는 점에서 문제가, 해시에있다. 불행히도 이것은 예를 들어 a dictionary of common passwords에 대한 해시 값을 생성하는 것이 간단한 작업임을 의미합니다. 데이터베이스가 손상된 경우 공격자는 저장된 해시 된 모든 암호를 이전에 계산 된 값과 비교할 수 있으며 일치하면 Bazinga! 그는 당신의 데이터에있어.
이를 방지하기 위해 초기 해시 작업을 수행 할 때 수행 할 수있는 작업은 동시에 해시되는 암호와 혼합되는 추가 비트의 무작위 데이터를 생성하는 것입니다. 이것을 소금 (또는 일반적으로 덜 사용)이라고합니다. 이것을하기 위해 코드를 재현하는 대신이 시점에서 blowdart의 책 ASP.NET 보안 시작 (Amazon UK | Amazon US)으로 안내 할 것입니다.이 모든 내용은 해싱, 소금 처리 및 '적절한' 암호화.