2010-04-04 5 views
10

나는 특별한 해시 함수를 찾고 있습니다. 큰 문자열 목록이 있다고 가정 해 봅시다. 해시 값에 따라 순서를 지정하면 무작위로 순서 지정해야합니다.빠른 해시 함수를 찾고

가장 중요한 점은 초고속이어야한다는 것입니다. 나는 md5와 sha1을 시도했고 그들은 많은 CPU 파워를 사용하고있다.

충돌은 문제가되지 않습니다.

저는 자바 스크립트를 사용하고 있으므로 구현하기가 너무 복잡해서는 안됩니다.

+0

또한보십시오 http://programmers.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed – rogerdpack

답변

5

중복 또는 변조를 감지하는 데 사용되는 정렬이 아니라 해시 테이블에 사용되는 일종의 해시 함수를 원하는 것처럼 보입니다.

인터넷 검색은 대체 해시 기능에 대한 풍부한 정보를 제공합니다. 우선 MD-5 나 SHA-1 같은 암호화 시그니쳐 해시를 피하고 다른 문제를 해결합니다.

시작하려면 this 또는 this 또는 this을 읽을 수 있습니다.

3

, 당신은 간단한 임시 해시를 구현할 수 있습니다, 예를 들면 : 그것은 좋은 공간/충돌 트레이드 오프가 있습니다 첫 번째와 마지막 문자를 가져 와서 문자열을 마지막 문자와 첫 번째 문자로 정렬하십시오. 당신이 말했듯이 그 결과는 "유사 무작위 적 (quasi random)"으로 보일 것이며 그것은 빠를 것입니다.

ca ad-hoc 
el like 
es simple 
gt taking 
hh hash 
nc can 
ti implement 
uy you 
+1

해시가 충돌을 피하는 데 적합하지 않으면 충돌로 인해 발생하는 속도가 충돌로 인해 손실됩니다. 트릭은 둘 사이의 균형을 찾는 것입니다. –

+1

줄리안은 자신의 질문에서 충돌/충돌이 문제가 아니며 이유를 이해할 수 있다고 분명히 말했습니다. 이와 같은 단순한 해시는 명백하지 않은 준 (quasi-random) 단어 순서를 제공합니다. 여러 단어가 동일한 해시 값을 가졌을 경우 더 이상 정렬 할 필요가 없으며 전혀 성능이 떨어지지 않아도됩니다. 분명히이 특정 해시 함수는 모든 종류의 데이터 세트에서 제대로 작동하지 않을 수 있지만 코너 케이스에 대해서는 말하지 않는 것입니다. –

3

Hsieh, MurmurBob Jenkin's 내 마음에 오는 : 예를 들어, 내 대답의 일부는 그 방법으로는 다음과 같이 것입니다 분류.
nice page about hash functions 품질 및 간단한 S-box 해시에 대한 몇 가지 테스트가 있습니다.

+0

SuperFastHash에서 벗어나는 것이 가장 좋습니다. (위의 첫 번째 링크) http://www.team5150.com/~andrew/blog/2007/03/breaking_superfasthash.html – Matt

+1

@Matt 글쎄, 그걸 바탕으로,이 페이지에서 언급 된 모든 해시가 어떤 해답이든 피해야합니다 , 그들은 암호 해시가 아니기 때문에 - 교환으로, 그들은 예를 들어, SHA, 그리고 - OP 질문과 마찬가지로 - 거의 노력하지 않고 JS에서 구현 될 수 있습니다. ;-). 암호화와 "표준"해시의 차이점을 확인하십시오. http://security.stackexchange.com/questions/11839/what-is-the-difference-between-a-hash-function-and-cryptographic - 해시 함수 –

관련 문제