2012-01-10 2 views
2

정말 간단한 질문입니다.int를 C# gethashcode()에서 string으로 변환 하시겠습니까?

간단한 일을하고 있습니다.

int audusdReqId = Convert.ToInt32("usd".GetHashCode()); 

지금 어떻게 다시 string "USD"로 32 비트 정수 audusdReqId을 변환 할 수 있습니다 : 나는 몇 string처럼이 :

string A = "usd"; 

그리고 C#에서의 해시 코드를 얻으려면?

+1

당신은, 그것은 (단지 2^32 = 4 294 .NET에서 967 296 다른 문자열, 즉 다행히 아니에요 경우가있을 것입니다 의미 할 수 있다면 대략 4 문자의 가능한 조합을 나타낼 것입니다 ...) –

답변

16

수 없습니다. 해시 코드에는 문자열로 다시 변환하는 데 필요한 모든 정보가 포함되어 있지 않습니다. 더 중요한 것은 GetHashCode을 사용하는 것에주의해야합니다. This article에서 무엇을 사용해야하는지 설명합니다. GetHashCode이 다른 환경에서 동일한 것을 반환한다는 것을 보증 할 수도 없습니다. 따라서 이 아니어야 암호화 목적으로 GetHashCode을 사용해야합니다. 당신은 문자열의 이진 표현을 만들려고하는 경우

, 당신은이 특정 문자열을 당신에게 byte[]을 줄 것이다

var bytes = System.Text.Encoding.UTF8.GetBytes(someString); 

를 사용할 수 있습니다. 당신은 문자열로 다시 변환하는 인코딩에 GetString를 사용할 수 있습니다 Robert Harvey는 의견에 지적

var originalString = System.Text.Encoding.UTF8.GetString(bytes); 

당신이 문자열을 확보 암호화의하려는 경우, 당신은 AES 같은 대칭 암호화 알고리즘을 사용할 수 있습니다.

+2

맞습니다. 양방향 변환이 아닙니다. 대칭 암호화와 같은 다른 것을 사용해야합니다. –

+0

잘 알고 있습니다. 전문가 –

4

hashcode/hash function의 목적은 한 방향이어야하며 원래 값으로 다시 변환 할 수 없다는 것입니다.

이유에 대한 이유가 있습니다. 일반적인 용도는 예를 들어 데이터베이스의 암호 저장입니다. 원래 값 (일반 텍스트 비밀번호)을 알지 않아야하며, 따라서 해시 코드를 사용하여 일반적으로 한 방향으로 인코딩해야합니다.

등을 hashsets에 값을 저장하는 등의 다른 용도도 있습니다

관련 문제