2009-08-25 13 views
12

मैं एक स्ट्रिंग हैश की तलाश में हूं लेकिन मुझे आउटपुट को पूर्णांक होने की आवश्यकता है इसलिए मैं md5 नहीं कर सकता। क्या यहां लोगों के पास कोई पसंदीदा संख्यात्मक हैश है कि वे मुझे प्रबुद्ध करना चाहते हैं। मैं PHP का उपयोग कर रहा हूँ।अच्छी संख्यात्मक हैश

धन्यवाद!

+0

आप अच्छी सुरक्षा में के रूप में या अच्छा कुंजी वितरण में के रूप में एक "अच्छा" हैश मतलब है ? पहला आपको आमतौर पर दूसरा देगा, लेकिन तुलनात्मक रूप से उच्च लागत पर। – RBarryYoung

+17

निम्नलिखित पृष्ठ में सामान्य उद्देश्य हैश फ़ंक्शंस के कई कार्यान्वयन हैं जो कुशल हैं और कम से कम टकराव प्रदर्शित करते हैं: http://partow.net/programming/hashfunctions/index.html –

उत्तर

3

हो सकता है कि यह आपके लिए काफी अच्छा है:

echo sprintf('%u', crc32($string)); 

संपादित: अन्य समान विकल्प,

echo hash('adler32', $string); 
4

MD5 के उत्पादन में सिर्फ काफी हर कल्पनीय हैश के साथ के रूप में एक संख्या है, । यह सिर्फ एक संख्या है जो आमतौर पर हेक्स में व्यक्त की जाती है। किसी भी हैश एल्गोरिदम का उपयोग करें जो आसानी से आपके लिए उपलब्ध है, अंत में बंद होने के रूप में कई बिट्स काट लें, और उन बिट्स को एक संख्या के रूप में देखें। कोई भी अच्छा हैश का अंतिम (या पहला, या मध्य) n बिट्स जैसा कि पूरे मूल्य के समान रूप से वितरित किया जाएगा।

+3

हां, लेकिन, हैश परिणाम को छोटा या तब्दील करने से इसका कारण बन जाएगा सुरक्षा और वितरण दोनों के मामले में ढीली गुणवत्ता। – nik

+2

यदि हैश अच्छा है (यदि यह एक आदर्श हैश के लिए उपयुक्त अनुमान है), तो जब आप इसे छोटा कर देते हैं तो यह समान रूप से अच्छी तरह से वितरित रहेगा, और कम कुंजीपटल के कारण क्या है, इसके अलावा कोई सुरक्षा खो नहीं जाएगी। – hobbs

1

मुझे लगता है कि स्टैक ओवरफ्लो पर पहले से ही कुछ अच्छे हैशिंग और PHP विशिष्ट प्रश्न हैं।
यहां hashing+php search आज़माएं।

एक छोटी सूची,

0

आप base_convert का उपयोग कर सकते दशमलव संख्या में और इसके विपरीत हेक्साडेसिमल बदलने के लिए। यदि आप पूर्णांक (एक स्ट्रिंग के रूप में) हेक्स में कनवर्ट करना चाहते हैं तो आप 32 बिट नंबर या उससे कम तक सीमित हैं (PHP_INT_MAX)।

php -r 'foreach (hash_algos() as $hash) { echo $hash, "\n", $a = hash($hash, "test"), "\n", $b = base_convert($a, 16, 10), "\n", $c = base_convert($b, 10, 16), "\n", ($c === $a ? "yes" : "no"), "\n\n"; }' > hashes.txt 
उपलब्ध हैश मैं था के

, इन लोगों को मैं दशमलव और हेक्स के बीच में परिवर्तित कर सकते हैं:

adler32 
c1015d04 
3238092036 
c1015d04 
yes 

crc32 
accf8b33 
2899282739 
accf8b33 
yes 

crc32b 
d87f7e0c 
3632233996 
d87f7e0c 
yes 
संबंधित मुद्दे