* md5 를 쓴다고 가정했을때, 16진수(0~F)로 출력하는게 보통인데, 이를 32진법이나, 64진법등으로 손수~ 만들어서 처리한다면 9자리로 하는것도 문제는 아닙니다.(실제로 저는 36진법을 만들어 사용한적이 있습니다. 이유는? 질문자 님과 비슷한 이유였던것 같군요. 가물가물~)
* md5 말고 다른 해쉬알고리즘 sha1등을 고려하는것도 좋습니다.
단방향일 필요는 없습니다. 숫자,영문자 어떤 입력이 들어와도
유니크한 최대 13자리 영대/소문자, 숫자가 나오면 됩니다.
많은 정보 정말 감사드립니다. :o
제가 추측하기로는 그리 어려운 문제는 아닐 듯 싶습니다. 단 몇 가지 가정이 필요합니다.
이미 생성되었던 모든 ID 값들을 기록하고 있다면 충돌을 방지하기 위해서 적당한 방법을 사용할 수 있습니다. 예를 들어서, md5를 쓴다고 할 때 "아주 어쩌다가" 다른 ID 값과 겹치면 ID 값을 다시 md5를 해서 쓰면 된다던지 하는 것이죠. 해쉬 테이블, 특히 chaining techinique를 쓰는 경우 이런 방법을 자주 사용합니다. (linear probing이다 뭐다 하는 것들이 다 여기에 해당하죠) 다시 말씀드리지만 이 방법은 이미 생성되었던 모든 ID 값들을 기록해야 합니다. 그렇지 않고서는 어떤 방법을 쓰더라도 충돌을 피하기는 힘듭니다.
다음은 제가 대충 짜 본 예시 코드입니다. 안 돌아 가도 이상할 건 없습니다 -_-; MD* 구조체/함수들은 RFC 1321의 그것들이고, dest에는 적어도 9바이트가 할당되어 있어야 합니다. (ID 8자리 + 널문자)
잘라서 쓰세요 -_-;MD5도 32자리가 유니크하다는 보장은 없지
잘라서 쓰세요 -_-;
MD5도 32자리가 유니크하다는 보장은 없지 않나요? 확률적으로 매우 낮을 뿐...;
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
^^
컥.. 그런 방법이...
md5 라는 단방향 해쉬 함수도 중복되나 보군요..
CDDB는 숫자를 가지고 8자리 16진수를 만드나본데요, 참고하시면 어떨
CDDB는 숫자를 가지고 8자리 16진수를 만드나본데요, 참고하시면 어떨까요? 위키피디아에서 CDDB를 검색해서 찾았습니다.
http://freedb.org/modules.php?name=Sections&sop=viewarticle&artid=6
* md5 를 쓴다고 가정했을때, 16진수(0~F)로 출력하는게 보통인데
* md5 를 쓴다고 가정했을때, 16진수(0~F)로 출력하는게 보통인데, 이를 32진법이나, 64진법등으로 손수~ 만들어서 처리한다면 9자리로 하는것도 문제는 아닙니다.(실제로 저는 36진법을 만들어 사용한적이 있습니다. 이유는? 질문자 님과 비슷한 이유였던것 같군요. 가물가물~)
* md5 말고 다른 해쉬알고리즘 sha1등을 고려하는것도 좋습니다.
정답 : 없음.유니크하게 생성할수는 있으나... 콜리션발생.
정답 : 없음.
유니크하게 생성할수는 있으나... 콜리션발생.
지금 이 순간에도 콜리션문제를 해결할려고 많은 수학자와 컴퓨터과학자분들이 연구실에서 고민을 하고 계실겁니다.
그리고, 국어사전에 "검증"이란 단어가 있죠.
공인된 협회, 기간, 단체...가 아닌 한명 또는 소수의 사람들이 많든 평션이라면...
물론, 수학적으로 증명가능하다면 모를까...
암튼...
MD5같은 검증된 해쉬펑션을 쓰시는걸 추천합니다.
Hello World.
Re: MD5처럼 입력되는 문자나숫자를 유니크하게 9자리로 만드는 펑션이 있을까요?
* 입력되는 문자나 숫자가 같을 경우가 있다면, 시간등을(해상도는 분위기보고..) 추가하여 입력문자열을 형성시키고, 해쉬함수에 넣어서 보다 해쉬 충돌을 예방하게 만들 수 있습니다.
* md5 hash가 충돌이 일어날 가능성이 아주 낮습니다만, 최근 md5 보다는 sha1을 권장하고 있습니다.
* 참고 : http://bbs.kldp.org/viewtopic.php?t=42649
단방향일 필요가 없다면, 압축 기법 중에 뭔가 쓸만할게 있을 것 같습니다
단방향일 필요가 없다면, 압축 기법 중에 뭔가 쓸만할게 있을 것 같습니다만...
감사합니다.
안녕하세요.
단방향일 필요는 없습니다. 숫자,영문자 어떤 입력이 들어와도
유니크한 최대 13자리 영대/소문자, 숫자가 나오면 됩니다.
많은 정보 정말 감사드립니다. :o
증명 -_-?
간단하게 생각해보죠.
큰집합이 있고(원문).. 작은집합이 있습니다(해싱값).. 큰집합에서 작은집합으로 1:1 매핑이 유니크하게 이루어지겠습니까? 콜리션을 해결하려고 연구하는 과학자가 있다면 정신 번쩍들도록 을룡타를 날려주겠습니다.
설 잘 보내세요
Re: 감사합니다.
제가 추측하기로는 그리 어려운 문제는 아닐 듯 싶습니다. 단 몇 가지 가정이 필요합니다.
이미 생성되었던 모든 ID 값들을 기록하고 있다면 충돌을 방지하기 위해서 적당한 방법을 사용할 수 있습니다. 예를 들어서, md5를 쓴다고 할 때 "아주 어쩌다가" 다른 ID 값과 겹치면 ID 값을 다시 md5를 해서 쓰면 된다던지 하는 것이죠. 해쉬 테이블, 특히 chaining techinique를 쓰는 경우 이런 방법을 자주 사용합니다. (linear probing이다 뭐다 하는 것들이 다 여기에 해당하죠) 다시 말씀드리지만 이 방법은 이미 생성되었던 모든 ID 값들을 기록해야 합니다. 그렇지 않고서는 어떤 방법을 쓰더라도 충돌을 피하기는 힘듭니다.
다음은 제가 대충 짜 본 예시 코드입니다. 안 돌아 가도 이상할 건 없습니다 -_-; MD* 구조체/함수들은 RFC 1321의 그것들이고, dest에는 적어도 9바이트가 할당되어 있어야 합니다. (ID 8자리 + 널문자)
- 토끼군
댓글 달기