2010-06-09 2 views
2

나는 파이썬에 초보자입니다. 내가 해탈해질 수 있을까, 아니면 어떻게하면 가치를 깨뜨릴 수 있습니까? std hash() 함수를 사용하고 있습니다.파이썬 unhash 값

#process X 
hashedVal = hash(someVal) 
#send n receive in process Y 
someVal = unhash(hashedVal) 
#for example print it 
print someVal 

들으을 미리

+0

직렬화에 대해 이야기하고 있습니까? – SilentGhost

+3

왜 이것을하고 싶습니까? 해시를 보내고 다른 끝에서 해쉬를 풀어서 3GB 데이터를 보내는 속도를 높이려고하십니까? ... –

+0

이 방법이 실행 가능하다면 많은 암호 시스템이 죽을 것입니다. –

답변

3

에 당신은 없다 "unhash"데이터가, 해시 함수로 인해 돌이킬 수 : 내가 뭘하고 싶은 값은로 unhash 다음 어딘가에 보내 먼저 해시이다 비둘기 집 원리

http://en.wikipedia.org/wiki/Hash_function
http://en.wikipedia.org/wiki/Pigeonhole_principle

에 당신이 암호화/암호 해독을 위해 무엇을 찾고있는 것 같아요. (또는 다른 답변/설명에서 언급 한 압축 또는 직렬화)

+0

또는 압축/압축 풀기. –

0

이것은 일반적으로 불가능합니다. 해시 함수는 반드시 정보를 잃고, 파이썬의 hash도 예외는 아닙니다.

18

할 수 없습니다.

해시는 원래 값의 압축 된 버전이 아니며 숫자 (또는 유사한 문자) 에서 파생 된 원래 값의입니다. 해시 구현의 본질은 두 개의 다른 객체가 동일한 해시 값을 생성하는 것이 가능하다는 것입니다 (그러나 해시 알고리즘이 좋은 경우 통계적으로는 불가능합니다).

이것은 N 개의 다른 항목이 있고 N 개의 숫자가 M보다 큰 M 개의 다른 범주 (즉, 범주보다 많은 항목)에 배치하려는 경우 기본적으로 다음과 같이 명시되어 있습니다. Pigeonhole Principle으로 알려져 있습니다. 여러 항목을 포함하는 일부 카테고리로 끝날 것입니다. 해시 값은 일반적으로 해시 값보다 훨씬 작으므로 동일한 원칙을 따릅니다.

이와 같이 해쉬 값을 얻으면 되돌릴 수 없습니다. 이보다 다른 방식으로 데이터를 전송해야합니다.

예를 들어 (매우 좋은 것은 아니지만) 해시 알고리즘은 모듈러스 3 (즉, 3으로 나눈 나머지)을 계산하는 것입니다. 그런 다음 번호에서 다음과 같은 해시 값을 가질 것이다 :

1 --> 1 <--+- same hash number, but different original values 
2 --> 2  | 
3 --> 0  | 
4 --> 1 <--+ 

당신이하기 위해이 방법으로 해시 함수를 사용하려고 :

이 가
    해시 값이
  • 저장 공간 (당신이 관찰이다 것을 원래 데이터보다 훨씬 작은 크기)
  • 보안 전송 (해시 값을 역방향으로 변환하기 어렵다는 것을 확인했습니다.)
  • 전송 데이터 (해시 번호/문자열은 복잡한 개체보다 전송하기가 쉽습니다. 계층 구조)

...?

이유를 알고있는 이유는 "할 수 없습니다"보다 더 나은 대답을 줄 수 있습니다. "입니다.예를 들어

는 위의 3 개 가지 관찰을 위해, 여기에 제대로 각을 할 수있는 방법이다 :

  • 압축/압축 해제, 대부분의 프로그래밍 언어에서 일반적으로 사용할 수 GZIP 또는 ZLIB (두 가지를 사용하여 예를 들어/런타임 등)
  • RSA, AES 또는 이와 유사한 보안 암호화 알고리즘을 사용하는 암호화/암호 해독
  • 복잡한 개체 계층 구조를 사용하고 나중에 수행 할 수있는 이진 또는 텍스트 표현을 생성하는 코드 인 직렬화/역 직렬화 새로운 객체로 역 직렬화된다.
관련 문제