2011-01-28 12 views
7

मुझे एक हैश एल्गोरिदम की आवश्यकता है जो एक अल्फान्यूमेरिक स्ट्रिंग आउटपुट करता है जो अधिकतम 20 वर्ण लंबा है। "अल्फान्यूमेरिक" के लिए मेरा मतलब है [a-zA-Z0-9]20 अक्षरों के अल्फान्यूमेरिक आउटपुट के साथ हैश एल्गोरिदम अधिकतम

इनपुट (उदाहरण के 550e8400-e29b-41d4-a716-446655440000) विहित प्रपत्र में UUID रों हैं

विकल्प में वहाँ एक रास्ता इन सीमाओं के साथ एक स्ट्रिंग के लिए एक SHA1 या MD5 हैश कन्वर्ट करने के लिए है?

धन्यवाद।

संपादित

क्रिप्टोग्राफी द्वारा सुरक्षित होने की जरूरत नहीं है। टकराव डेटा को गलत बनाते हैं, लेकिन यदि वे sporadically होता है तो मैं इसके साथ रह सकता हूं।

संपादित 2

मैं अगर छोटा MD5 या SHA1 टकराव भी अक्सर ऐसा होता नहीं जानता। अब मैं सोच रहा हूं कि क्या एमडी 5 मान या SHA1 मान में 20 वर्णों को छोटा करना बेहतर है।

+0

क्या आपके पास इन हैंश के लिए कोई वांछित गुण है? क्या वे क्रिप्टोग्राफिक रूप से सुरक्षित होना चाहिए, या हैश टेबल के लिए पर्याप्त अच्छा होना चाहिए? – templatetypedef

+1

क्या आप हेक्स (या बेस 64) में SHA1 या MD5 हैश स्ट्रिंग को मुद्रित नहीं कर सकते हैं और आवश्यकता होने पर 20 वर्णों तक छंटनी कर सकते हैं? –

+1

आपका लक्ष्य क्या है? क्या ऐसा है कि एक SHA1 हैश की 20 वर्ण सबस्ट्रिंग लेना काम नहीं करेगा? –

उत्तर

13

बस उन पात्रों को क्लिप करें जिन्हें आपको GUID के हैश से आवश्यकता नहीं है। एक अच्छे हैश फ़ंक्शन के साथ, हैश के किसी भी भाग की अप्रत्याशितता भाग के आकार के समान है। यदि आप चाहते हैं, तो आप मानक हेक्स बेस 16 के बजाय इसे बेस 32 एन्कोड कर सकते हैं। ध्यान रखें कि इससे प्रति चरित्र एंट्रॉपी में सुधार नहीं होगा (केवल 25%)।

गैर-क्रिप्टोग्राफिक उपयोगों के लिए, इससे कोई फ़र्क नहीं पड़ता कि आप MD5, SHA1 या SHA2 को छोटा करते हैं या नहीं। एंट्रॉपी में न तो कोई चमकदार कमी है।

+2

धन्यवाद। मैंने 1 मिलियन यूयूआईडी उत्पन्न करने और SHA1 हेक्स के पहले 20 अक्षर लेने की कोशिश की। कोई टकराव नहीं मिला। टेस्ट स्क्रिप्ट यहां: https://gist.github.com/800132 – Giacomo