2009-09-30 3 views
1

내가 사용하고있는 편리한 해시 코드를 되돌릴 수 있습니까? 내가하고 결국해시 숨기기 해제 C#

using System.Security.Cryptography; 

public static string EncodePasswordToBase64(string password) 
{ byte[] bytes = Encoding.Unicode.GetBytes(password); 
    byte[] inArray = HashAlgorithm.Create("SHA1").ComputeHash(bytes); 
    return Convert.ToBase64String(inArray); 
} 

모든 것이 끔찍하게 실패 :(.

답변

19

아니, 당신은 해시를 취소 할 수 없습니다. 전형적인 프로세스가 있는지 확인하기 위해, 당신이 가지고있는 해시에 다른 입력을 비교하는 것입니다 같은

처럼 (의사) :..

initial = Hash(password); 
possible = Hash("test"); 

if(initial == possible){ 
    // we infer that password = "test" 
} 

그러나 SHA1이 SHA0 및 MD5는 더 이상 사용할 수없는주의 (때문에 각 깨는 다양한 정도의에) 당신은 사용해야 SHA- 2

+0

실키는 머리에 못을 박고, 해시는 단방향이며, 무차별 옵션을 통해서만 역방향으로 바꿀 수 있습니다. –

+0

해시가 반드시 단방향 일 필요는 없습니다. 예를 들어, 파이썬에서 hash (1) = 1 인 경우, 그것은 확실히 되돌릴 수 있습니다. 출력 문자열의 크기가 입력 문자열의 크기보다 작 으면 해시는 단방향입니다. – Falaina

+1

Falaina : 물론 두 가지가 있습니다. '해시'의 정의는 입력 내용을 더 작은 크기 (http://en.wikipedia.org/wiki/Hash_function) 및 암호 해시 (컨텍스트;이 질문에 따라)로 줄이는 것입니다. 디자인에 의해 되돌릴 수 없습니다. (http://en.wikipedia.org/wiki/Cryptographic_hash_function#Properties) –

4

"해시하지 않는 것"의 유일한 실제 방법은 모든 가능한 입력에 대해 계산 된 해시 테이블의 큰 테이블 인 무지개 테이블을 사용하는 것입니다. 해시를 살펴본 후 이 아마도 원래 입력을 얻었습니다.

http://en.wikipedia.org/wiki/Rainbow_table

+3

... 해시를 저장하기 전에 중요한 데이터를 소금 화하는 것이 중요한 이유입니다. http://en.wikipedia.org/wiki/Salt_(cryptography) –

0

할 수 있습니다하지 않은 해시 SHA1, MD5, 또는 불행하게도 다른 단방향 해시 방법. BASE-64를 실행 취소 할 수는 있지만 가능합니다.

+0

해싱은 암호화가 아니며 해시입니다. 암호화는 키를 사용하며 되돌릴 수 있습니다. –

+0

아, 내 실수. 고마워. – JonnyLitt

0

SHA는 "Secure Hash Algorithm"의 NSA 약어입니다.

보안 해시는 정의에 따라 되돌리기가 어렵습니다. 그렇지 않으면 보안되지 않습니다.

동일한 해시를 생성하는 소스를 쉽게 계산할 수있게하려면 가역 해시 함수를 사용해야합니다 (해시 충돌로 인해 원본 소스를 가져올 수도 있습니다. 동일한 해시 출력이 발생합니다).