2012-11-19 24 views
5

क्लाइंट साइड पर मैं एक स्ट्रिंग का एमडी 5 एन्क्रिप्शन कर रहा हूं और फिर हैश पर आधारित बेस 64 एन्कोडिंग कर रहा हूं।डीकोड किए जाने पर दो अलग-अलग BASE 64 एन्कोडेड तारों का परिणाम समान स्ट्रिंग में हो सकता है?

यह अंतिम एन्कोडेड स्ट्रिंग तब सर्वर पक्ष की तुलना के लिए उपयोग की जाती है।

मैं इसे कई परीक्षण मामलों के लिए सफलतापूर्वक करने में सक्षम था लेकिन यह नीचे के लिए विफल रहा। MD5

के लिए

स्ट्रिंग

2679:07071960:09348448:3:08912206:3:EXPRESS:1:EU4NW31E7INEC1X 

मेरे MD5 हैश स्ट्रिंग:

291423A531148527A9524EA0924CDF68 

मेरे Base64 इनकोडिंग स्ट्रिंग:

KRQjpTEUhSepUk6gkkzfaA== 

जब मैं Base64 एन्कोडिंग के लिए MD5 हैश स्ट्रिंग रखने का प्रयास http://www.opinionatedgeek.com/dotnet/tools/base64encode/ पर यह निम्नलिखित स्ट्रिंग उत्पन्न करता है:

MjkxNDIzQTUzMTE0ODUyN0E5NTI0RUEwOTI0Q0RGNjg= 

लेकिन, जब मैं अपने Base64 स्ट्रिंग डिकोड करने के लिए प्रयास करते हैं, वह यह है कि "KRQjpTEUhSepUk6gkkzfaA ==", यहाँ http://www.opinionatedgeek.com/dotnet/tools/Base64Decode/Default.aspx मैं अपने हैश कोड हो रही है (.bin फ़ाइल हेक्स संपादक में उत्पन्न किया जा रहा खोला)।

तो, क्या यह संभव है कि एक स्ट्रिंग में एकाधिक बेस 64 एन्कोडेड मान हो?

मैं इनकोडिंग स्ट्रिंग पैदा करने के लिए नीचे दिए गए कोड का उपयोग कर रहा:

public static String getHashCode(String text) 
{ 
    MessageDigest md; 
    byte[] md5hash = new byte[32]; 
    try{ 
    md = MessageDigest.getInstance("MD5"); 

    md.update(text.getBytes("iso-8859-1"), 0, text.length()); 
    md5hash = md.digest(); 
    } 
    catch(Exception e) 
    { 
     return "-1"; 
     } 
    String encoded = Base64.encode(md5hash); 
    String retValue = new String(encoded); 


    return retValue; 

    } 

कृपया सुझाव है कि क्या गलत हो रहा है और कैसे यकीन है कि हम ग्राहक और सर्वर साइड पर दोनों को पचाने में एक ही उपयोग करें कि बनाने के लिए।

+1

theorically आप दो तार एक ही MD5 दे रही है लेकिन Base64 एक सममित कोई नुकसान एन्कोडिंग है हो सकता है। लेकिन बेस 64 के रूप हैं (देखें [विकिपीडिया] (http://en.wikipedia.org/wiki/Base64))। –

+0

छोटा एक कच्चा बाइट है, जबकि लंबा एक पाठ है। मुझे नहीं लगता कि एक ही स्ट्रिंग में डीकोड करने के लिए 2 अलग-अलग बेस 64 (एस्केप को अनदेखा करना) संभव है। – nhahtdh

उत्तर

5

आपके पास MD5 हैश 291423A531148527A9524EA0924CDF68 है जो बेस 64 एन्कोडेड स्ट्रिंग MjkxNDIzQTUzMTE0ODUyN0E5NTI0RUEwOTI0Q0RGNjg = उत्पन्न करता है, जो ठीक है। आपने एमडी 5 हैश को एएससी हेक्स प्रस्तुति में परिवर्तित कर दिया है, और बेस 64 ने एन्कोड किया है।

हालांकि अपने खुद के getHashCode() अलग ढंग से काम करता है, यह द्विआधारी अपने हैश कोड के प्रतिनिधित्व के एक बेस 64 एन्कोडिंग, आप एक ascii हेक्स प्रतिनिधित्व करने के लिए अपने हैश परिवर्तित नहीं किया बनाता है, और यही कारण है कि आप अलग अलग बेस 64 एन्कोडेड तार देखते हैं ।

2

स्वीकार्य उत्तर समस्या हल करता है लेकिन सवाल का जवाब नहीं देता है।

उदाहरण के लिए, इन बेस 64 को महत्व देता QzNWwq== और QzNWwr== एनकोड ही बाइनरी मान (हेक्स) 433356c2

आप http://kjur.github.io/jsjws/tool_b64udec.html पर यह जाँच करें या आदेश

echo <<BASE64>> | base64 -d | xxd 

का उपयोग कर सारांश में कर सकते हैं

  • दो अलग-अलग बेस 64 एन्कोड समान मान ->सत्य
  • दो अलग-अलग मान ही बेस 64 मूल्य उत्पन्न ->झूठी (this देखें)