2011-10-12 6 views
8

क्या कुछ स्ट्रिंग को डिक्रिप्ट करना संभव है जो पहले जावा में SHA-1 एल्गोरिदम के साथ एन्क्रिप्ट किया गया था?जावा में sha1-एन्क्रिप्टेड स्ट्रिंग को डिक्रिप्ट करने के लिए कैसे करें

+2

SHA-1 एक हैश है, एन्क्रिप्शन एल्गोरिदम नहीं है। यदि आप अपने SHA-1 हैश से एक स्ट्रिंग निकालने का प्रयास कर रहे हैं, शुभकामनाएं। इसे प्री-इमेज अटैक कहा जाता है। – Mysticial

+1

यह _possible_ है, लेकिन कम्प्यूटेशनल संसाधनों और समय की आवश्यकता होगी, क्योंकि sha1-एन्क्रिप्टेड डेटा एन्क्रिप्टेड होने के बाद डिक्रिप्ट करने के लिए नहीं है। – jsvk

+0

मुझे लगता है कि सवाल यह होना चाहिए कि sha1 को डिक्रिप्ट करना कितना कम्प्यूटेशनल रूप से गहन है। जावा को इसके साथ क्या करना है? यदि आपके पास एक अच्छा एल्गोरिदम है, तो आप इसे कोड करने के लिए किसी भी भाषा का उपयोग कर सकते हैं। –

उत्तर

12

SHA1 cryptographic hash function है, और संपूर्ण बिंदु यह है कि आप इसे पूर्ववत नहीं कर सकते हैं। यदि हैश को पीछे हटाना संभव था (किसी दिए गए हैश के लिए इनपुट ढूंढें), तो यह उपयोगी नहीं होगा। यदि आपको कुछ एन्क्रिप्ट करना है और बाद में इसे डिक्रिप्ट करना है, तो आपको encryption functionAES या RSA जैसे उपयोग करना चाहिए।

हालांकि, बहुत सरल इनपुट के लिए इनपुट क्या था और यह जांच कर crack the hash function संभव हो सकता है कि हैश एक जैसा है या नहीं।

उदाहरण पायथन कोड:

def crack_hash(hash_to_crack, hash_function, list_of_guesses): 
    # Try to hash everything in our guess list 
    for guess in list_of_guesses: 
     new_hash = hash_function(guess) 
     # if the hashes match, we found it 
     if new_hash == hash_to_crack: 
      return guess 
    # If none of them match, give up 
    return None 
बेशक

, यदि आप वास्तव में कुशलता से हैश दरार, John the Ripper या Hashcat की तरह सॉफ्टवेयर का उपयोग कर चाहते हैं शायद अपने सबसे अच्छे शर्त है। ध्यान दें कि यह आम तौर पर पासवर्ड पर काम करता है क्योंकि वे अनुमानित और कम अनुमानित होते हैं, लेकिन इनपुट बढ़ने के साथ ही कठिनाई बढ़ जाती है। आप प्रत्येक SHA-1 हैश को 6-वर्ण इनपुट के साथ मिनटों में क्रैक कर सकते हैं, जबकि 16 वर्णों वाले एक को क्रैक करने से औसत पर ट्रिलियन वर्ष लगेंगे।

+0

इस विधि को एक उचित आकार की सूची के साथ अंतरिक्ष और समय की अश्लील मात्रा की आवश्यकता होगी। टाइम-मेमोरी ट्रेडऑफ लागू करने के लिए एक [इंद्रधनुष तालिका] (http://en.wikipedia.org/wiki/Rainbow_table) का उपयोग करने के लिए एक और व्यावहारिक विकल्प है। यह विधि नमकीन हैंश के लिए बेकार है, हालांकि – jsvk

+0

@jsvk - मैं यह नहीं कह रहा कि यह एक अच्छा विचार है। असल में, मैं उम्मीद कर रहा था कि उदाहरण यह बताएगा कि यह कितना व्यर्थ है जब तक कि आपके पास अनुमान लगाने के लिए कोई अच्छा विचार न हो। इसे बेहतर किया जा सकता है, लेकिन वास्तव में, कोई भी अपना पासवर्ड क्रैकर का उपयोग नहीं करता है - और निश्चित रूप से कोई भी पायथन में लिखा नहीं है;) –

2

नहीं, यह संभव नहीं है, क्योंकि SHA-1 एक हैश है - यह एक तरह का टिकट है। यदि आप एक स्ट्रिंग को क्रिप्ट और डिक्रिप्ट करना चाहते हैं तो आपको कुछ एन्क्रिप्शन एल्गोरिदम का उपयोग करना होगा जो एन्क्रिप्टेड डेटा जेनरेट करने के लिए कुंजी का उपयोग करता है। फिर आप डेटा एन्क्रिप्ट कर सकते हैं और इसे सफलतापूर्वक डिक्रिप्ट करने के बाद। उदाहरण के लिए एईएस। आप एईएस के बारे में here

2

संक्षिप्त उत्तर: यह असंभव है।

क्योंकि पीएचओएनएचओएल सिद्धांत द्वारा SHA-1 cryptographic hash function है, यह गणितीय रूप से विपरीत है। केवल 2 संभव SHA-1 हैश हैं। चूंकि संभावित इनपुट तारों की असीमित संख्या होती है, इसलिए टकराव होना चाहिए (एक ही मान के लिए हैश एकाधिक इनपुट)। आम तौर पर, ऐसा कोई तरीका नहीं है कि आप जान सकें कि इनमें से कौन सा तार मूल इनपुट था।

हालांकि, असली दुनिया तार पूरी तरह मनमाने ढंग से नहीं हैं। यदि आप अपनी इनपुट स्ट्रिंग के बारे में कुछ जानकारी जानते हैं (उदा। कि यह 5 वर्णों से कम लंबा था), उच्च संभावना के साथ, इनपुट अद्वितीय है। दुर्भाग्य से आपके लिए, एसएचए -1 जैसे हैश फ़ंक्शन जानबूझकर कम्प्यूटेशनल रूप से उलटा करने के लिए अक्षम हैं। (एसएचए -1 पर सैद्धांतिक हमले हैं, लेकिन मुझे नहीं लगता कि वर्तमान में किसी भी व्यवहार्य के करीब भी माना जाता है।)

तो यदि आपको हैश डेटा पुनर्प्राप्त करने की आवश्यकता है, तो आपको ब्रूट फोर्स का उपयोग करना होगा: प्रत्येक को SHA-1ing आज़माएं n से कम लंबाई की स्ट्रिंग, और देखें कि हैश मैचों से मेल खाता है या नहीं। लेकिन एन तक लंबाई के बहुत से तार हैं, इसलिए यह जल्दी से अक्षम हो जाता है।

ब्रह्मांड के अंत से पहले हैश किए गए डेटा को पुनर्प्राप्त करने का एक संभावित तरीका है। आपकी एकमात्र आशा है कि rainbow tables जैसे अधिक परिष्कृत विधि का उपयोग करना है। यह केवल काम करेगा यदि आप जानते हैं कि आपकी मूल स्ट्रिंग बहुत कम थी (~ 15 वर्णों से कम)। यहां तक ​​कि छोटे तारों के लिए, तालिका को पूर्व-गणना करने में लंबा समय लगेगा (और डिस्क स्पेस के गीगाबाइट)।

+0

कृपया अपडेट करें: यह बहुत अच्छा है, मुझे केवल एल्गोरिदम की आवश्यकता है। [sha1-decrypter] (http://www.stringfunction.com/sha1-decrypter.html) उस पृष्ठ का लिंक है जहां आप ऑनलाइन डिक्रिप्टर –

+2

@VineetVerma पा सकते हैं: यह एक डिक्रिप्टर नहीं है; यह एक रिवर्स लुकअप है। यह कोड अनिवार्य रूप से उपयोग करता है, 'मानचित्र लुकअप = नया हैश मैप ();/* कुछ सामान्य इनपुट जोड़ें * /; वापसी lookup.get (sha1sum); '। यह केवल तभी काम करेगा जब वे उस इनपुट को जोड़ते हैं जो आप मानचित्र पर खोज रहे हैं। –

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