2012-04-26 5 views
2

가변 길이 (10-20 문자)의 편도 해시 영숫자 + 특수 문자 (ascii) 문자열이 필요합니다. 출력 길이는 가변적이어야하지만 최대 25 자, 영숫자 및 대소 문자를 구분하지 않아야합니다.가변 길이 영숫자 출력의 편도 해시

충돌을 생성하고 싶지 않으므로 충돌이 발생하지 않았거나 충돌이 발생했는지 (아직 증명되지 않은) 충돌이 필요합니다.

+0

해시의 전체적인 점은 고유 한 식별자로 사용할 수있는 원본 데이터보다 작은 것을 생성하는 것이라고 생각했습니다. 따라서 충돌은 항상 발생합니다. 나는 당신이 해시가 아닌 다른 것을 원한다고 생각합니다. – johnnycrash

+0

@johnnycrash 해시는 더 작아야하지만 해시 크기를 제어하는 ​​것이 유용하지 않다는 것을 의미하지는 않습니다. 블룸 필터는 해시의 길이를 변경해야합니다. –

답변

1

Here은 다양한 해시 함수에 대한 좋은 자료입니다. 나는 당신이 무엇을 요구하고 있는지 전혀 생각하지 않는다. 그들은 모두 충돌 할 것입니다.

아마도 간단한 암호화 알고리즘을 확인해야 할 것입니다.

char szInput = "hash me", szOutput[20], szKey = "foo"; 
int i, cbKey = strlen(szKey), cbInput = strlen(szInput); 

for (i=0 ; i<cbInput ; ++i) 
    szOutput[i] = szInput[i]^szKey[i%cbKey]; // xor with a differnt char from the key 

당신은 출력을 인식하지 못합니다하고 가역적이기 때문에 실 거예요 충돌 : 여기

당신이 원하는 것을 할 수있는 간단한 암호화 기술입니다.

해독하기가 더 어려운 또 다른 방법은 키의 현재 문자를 rand()에 대해 호출해야하는 횟수로 사용하는 것입니다. Xor는 rand()에 대한 마지막 호출의 결과를 사용합니다. rand()는 항상 주어진 시드에 대해 동일한 수의 스트림을 생성하므로 "해시"는 충돌하지 않으며 해독 될 수 없습니다.

해시를 "편도"로 만들려면 키를 버리십시오!

+0

감사합니다. 이것은 좋은 출발점입니다. 나는 당신이 당신의 코멘트에 언급 한대로 잘못된 방향으로 검색하고 있었다고 생각합니다. –