क्लाइंट साइड पर मैं एक स्ट्रिंग का एमडी 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;
}
कृपया सुझाव है कि क्या गलत हो रहा है और कैसे यकीन है कि हम ग्राहक और सर्वर साइड पर दोनों को पचाने में एक ही उपयोग करें कि बनाने के लिए।
theorically आप दो तार एक ही MD5 दे रही है लेकिन Base64 एक सममित कोई नुकसान एन्कोडिंग है हो सकता है। लेकिन बेस 64 के रूप हैं (देखें [विकिपीडिया] (http://en.wikipedia.org/wiki/Base64))। –
छोटा एक कच्चा बाइट है, जबकि लंबा एक पाठ है। मुझे नहीं लगता कि एक ही स्ट्रिंग में डीकोड करने के लिए 2 अलग-अलग बेस 64 (एस्केप को अनदेखा करना) संभव है। – nhahtdh