java - जावा-हैश एल्गोरिदम-सबसे तेज़ कार्यान्वयन




hash md5 (4)

इन्हें जांचें: एसएचए / एमडी 5 उदाहरणों के बहुत सारे

इसके अलावा: एक ही थ्रेड से: फास्ट एमडी 5

स्ट्रिंग हैश = MD5.asHex (MD5.getHash (नई फ़ाइल (फ़ाइल नाम));

मैं जानना चाहता हूं कि जावा के लिए हैश एल्गोरिदम का सबसे अच्छा और तेज़ कार्यान्वयन क्या है विशेष रूप से MD5 और SHA-2 512 (SHA512) या 256. मैं चाहता हूं कि कोई फ़ंक्शन एक तर्क के रूप में स्ट्रिंग प्राप्त करे और परिणामस्वरूप हैश को वापस कर दें। धन्यवाद।

संपादित करें: यह प्रत्येक यूआरएल को एक अद्वितीय हैश में मैप करने के लिए है। चूंकि एमडी 5 इस क्षेत्र में विश्वसनीय नहीं है, इसलिए मैं SHA-2 एल्गोरिदम के लिए सर्वोत्तम और तेज़ कार्यान्वयन खोजने में अधिक रुचि रखता हूं। ध्यान दें कि मुझे पता है कि SHA-2 कुछ यूआरएल के लिए एक ही हैश उत्पन्न कर सकता है लेकिन मैं इसके साथ रह सकता हूं।


एक स्ट्रिंग के लिए, बस hashCode() कॉल करें क्योंकि मेमोरी ओवरहेड में सस्ता है।

अन्यथा मैं निजी हैश के लिए इस कोड की सिफारिश करता हूं:

public static int hash8(String val) throws UnsupportedEncodingException {
    return hash8(val.getBytes("UTF-8"));
}

public static int hash8(byte[] val) {
    int h = 1, i = 0;
    for (; i + 7 < val.length; i += 8) {
        h = 31 * 31 * 31 * 31 * 31 * 31 * 31 * 31 * h + 31 * 31 * 31 * 31
                * 31 * 31 * 31 * val[i] + 31 * 31 * 31 * 31 * 31 * 31
                * val[i + 1] + 31 * 31 * 31 * 31 * 31 * val[i + 2] + 31
                * 31 * 31 * 31 * val[i + 3] + 31 * 31 * 31 * val[i + 4]
                + 31 * 31 * val[i + 5] + 31 * val[i + 6] + val[i + 7];
    }
    for (; i + 3 < val.length; i += 4) {
        h = 31 * 31 * 31 * 31 * h + 31 * 31 * 31 * val[i] + 31 * 31
                * val[i + 1] + 31 * val[i + 2] + val[i + 3];
    }
    for (; i < val.length; i++) {
        h = 31 * h + val[i];
    }
    return h;
}

एफवाईआई: http://lemire.me/blog/2015/10/22/faster-hashing-without-effort/


ब्लैक 2 पर विचार करें जो ऊपर वर्णित हैंश की तुलना में तेज़ और अधिक सुरक्षित है।

एमडी 5, एसएचए -1, एसएचए 256, और एसएचए -512 लंबाई-विस्तार के लिए अतिसंवेदनशील हैं।

एमडी 5 और एसएचए -1 टकराव के लिए कमजोर हैं।

एमडी 5 चयनित-उपसर्ग टकराव के लिए कमजोर है।

SHA-3 और BLAKE2 में कोई ज्ञात सुरक्षा समस्या नहीं है और अलग-अलग लंबाई के पाचन उत्पन्न कर सकते हैं।

हार्डवेयर में लागू होने पर SHA-3 सबसे तेज़ है; सॉफ़्टवेयर कार्यान्वयन का उपयोग करते समय ब्लैक 2 सबसे तेज़ है।

ब्लैक 2 बी 64-बिट प्लेटफॉर्म के लिए अनुकूलित है और 1 और 64 बाइट्स के बीच किसी भी आकार के पाचन का उत्पादन करता है।

ब्लैक 2 को 8 से 32-बिट प्लेटफार्मों के लिए अनुकूलित किया गया है और 1 और 32 बाइट्स के बीच किसी भी आकार के पाचन का उत्पादन करता है।

यहां एईएस, एमडी 5, एसएचए -256, और ब्लैक 2 बी के लिए मानक हैं।

https://blake2.net/

https://www.cryptopp.com/benchmarks.html

पहले लिंक में, ब्लैक 2 बी (9 47 एमबीआईटीएस) एसएचए -256 (413 एमबीआईटीएस) और एमडी 5 (632 एमबीआईटी) से काफी तेज है।

दूसरे लिंक में, एईएस -256 सीबीसी (805 एमबीआईटीएस) और ब्लैक 2 बी (776 एमबीआईटी) गति के बराबर और तेज़ी से एसएचए -256 (275 एमबीआईटीएस) और एमडी 5 (602) एमबीआईटी हैं।


विचार करने की एक और बात एमडी 4 का उपयोग कर रही है। यह एमडी 5 के रूप में सुरक्षित नहीं है, लेकिन इसकी गणना भी तेज है। एक्सपी तक विंडोज़ एमडी 4 में पासवर्ड स्टोर और एक्सचेंज करने के लिए इस्तेमाल किया जाता है, इसलिए हम इस हैश का उपयोग करते हैं क्योंकि यह अभी भी हमें इस प्लेटफ़ॉर्म पर प्रमाणीकरण सेवाएं प्रदान करने की अनुमति देता है।







sha2