2011-06-06 24 views
5

मुझे कोई समस्या है, शायद एक मूर्ख सवाल, मैं SHA1 एल्गोरिदम के साथ हैश के बाद डेटाबेस में डेटा स्टोर करना चाहता हूं। हालांकि, भविष्य में, डेटाबेस में आकार बढ़ेगा क्योंकि SHA1 में आकार के शब्द बड़े हैं।SHA1 के आकार को कम करने के लिए कैसे?

क्या हम SHA1 एल्गोरिदम के आकार को कम कर सकते हैं, शायद आकार का आधा। मुझे अपने मूर्ख सवाल, और मेरी बुरी अंग्रेजी के लिए खेद है। धन्यवाद। : डी

मैं जावा का उपयोग कर रहा हूं।

+0

आपको हैश के लिए क्या चाहिए? कौन सा हैशफंक्शन और आउटपुट आकार आवश्यक है उस पर निर्भर करता है कि आप इसके साथ क्या करना चाहते हैं। – CodesInChaos

उत्तर

10

20 बाइट प्रति हैश (बाइनरी स्टोरेज मानना) वास्तव में बहुत अधिक है? यदि आप वर्तमान में बाइनरी में हेक्स एन्कोडिंग स्विचिंग का उपयोग करते हैं तो आपको 20 बाइट प्रति हैश बचाता है। बेस 64 हेक्स की तुलना में लगभग 10 बाइट बचाता है।

यदि आप बस एक क्रिप्टोग्राफिक हैश को छोटा कर देते हैं तो यह अभी भी एक अच्छा क्रिप्टोग्राफिक हैश है, लेकिन कम उत्पादन आकार के साथ। आपको आवश्यक आउटपुट आकार आपके आवेदन पर निर्भर करता है।

यादृच्छिक परिवर्तनों के खिलाफ ईमानदारी जांच 32-64 बिट्स के बहुत कम हैश का उपयोग कर सकती है और क्रिप्टोग्राफ़िक हैश फ़ंक्शन की आवश्यकता नहीं होती है।

यदि आपको विशिष्टता की आवश्यकता है तो आपके पास हैश में >>2*log_2(entries) बिट्स होना चाहिए (birthday paradox देखें)। लगभग 120 बिट्स पर यह GUID/UUID के समान है (GUIDs के लिए sha1 आधारित पीढ़ी मोड है)

यदि आप क्रिप्टोग्राफिक शक्ति चाहते हैं तो मैं 128 बिट से नीचे जाने से बचूंगा।

4

नहीं; परिभाषा के अनुसार एक SHA-1 हैश का आकार 160 बिट्स है। मुझे दृढ़ता से संदेह है कि हैश का आकार एक समस्या होगी; मुझे लगता है कि आपके डेटाबेस में अन्य डेटा भी है? सबसे अधिक संभावना है कि आप पाएंगे कि डेटा के अन्य भाग डेटाबेस आकार में और भी योगदान देते हैं। और इन हैंश के साथ आप कितने पंक्तियों की उम्मीद करते हैं?

हालांकि, वहाँ है (इस स्ट्रिंग एन्कोडिंग पर निर्भर करता है, कम से कम 40 बाइट्स ले जाएगा) स्ट्रिंग के रूप हैश भंडारण और (यह 20 बाइट ले जाएगा) बाइनरी डेटा के रूप में यह भंडारण के बीच एक आकार अंतर। कम एक हैश एल्गोरिथ्म के उत्पादन लंबाई है, कमजोर यह है -

आप एक और एल्गोरिथ्म के लिए स्विच, के रूप में दूसरों का उल्लेख किया है, लेकिन वह नहीं एक सुरक्षा के नजरिए से एक अच्छा विकल्प हो सकता है कर सकते हैं।

+1

बेस 64 अभी भी एक मानव पठनीय स्ट्रिंग है, लेकिन 40 बाइट से कम की आवश्यकता है। – CodesInChaos

+0

@CodeInChaos: True; यह भी एक विकल्प है। –

+0

मैं लेनदेन की जानकारी में एक कुंजी स्टोर करना चाहता हूं, तो शायद आपका सुझाव एन्कोडिंग के बारे में अच्छा है .. धन्यवाद .. – fahmi

5

यदि आप इसे कम करते हैं तो यह अब SHA1 नहीं है :)। आपको एक अलग एल्गोरिदम

संबंधित मुद्दे