से अलग मुझे एंड्रॉइड पर कुछ एचएमएसी के साथ समस्याएं हैं। मैं निम्नलिखित कोड के साथ SHA1 एल्गोरिदम का उपयोग कर रहा हूं जो एंड्रॉइड एचएमएसी-शाए 1 के लिए खोज करते समय पूरे वेब पर दिखाई देता है।एंड्रॉइड एचएमएसी-एसएचए 1 मानक जावा एचएमएसी-एसएचए 1
String base_string = "This is a test string";
String key = "testKey";
try {
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec secret = new SecretKeySpec(key.getBytes("UTF-8"), mac.getAlgorithm());
mac.init(secret);
byte[] digest = mac.doFinal(base_string.getBytes());
String enc = new String(digest);
// Base 64 Encode the results
String retVal = Base64.encodeBase64String(enc.getBytes());
Log.v(TAG, "String: " + base_string);
Log.v(TAG, "key: " + key);
Log.v(TAG, "result: " + retVal);
} catch (Exception e) {
System.out.println(e.getMessage());
}
इस कोड को परीक्षण करने के लिए मैं एक साधारण मानक जावा इसके साथ (Log.v की जगह निश्चित रूप से System.out.println कॉल के साथ कॉल) कार्यक्रम तो मैं बनाम Android संस्करण की तुलना कर सकते बनाया। दोनों उदाहरणों में मैं base_string और कुंजी के लिए एक ही परीक्षण मान का उपयोग कर रहा हूं।
इसके अतिरिक्त मैंने मानक जावा से एन्कोड किए गए परिणामों को कुछ PHP फ़ंक्शन और सत्यापन सर्वर (कुछ ओथ टोकन का उपयोग करके) सत्यापित किया है। कोड मानक जावा प्रोग्राम में ठीक काम करता है हालांकि यह एंड्रॉइड प्रोग्राम में काम नहीं करता है। मैंने बहुत सी खोज की है और यह पता नहीं लगा कि क्या गलत है। किसी ने कभी इसका अनुभव किया है?
यहां मानक जावा और एंड्रॉयड के परिणाम हैं ...
- जावा (और PHP):
fH/+pz0J5XcPZH/d608zGSn7FKA=
- एंड्रॉयड कार्यक्रम:
fH/vv73vv709Ce+/vXcPZH/vv73vv71PMxkp77+9FO+/vQ==
इस पर ध्यान देने में थोड़ा और अधिक मैं कर रहा हूँ यकीन है कि यह एचएमएसी फ़ंक्शन है और बेस 64 एन्कोड नहीं है जहां यह उन एचएमएसी मानों की तुलना में गड़बड़ हो जाता है, एंड्रॉइड संस्करण में अतिरिक्त रिक्त स्थान और जावा प्रोग्राम बनाम अन्य अज्ञात चरित्र प्रतीकों के सभी प्रकार होते हैं।
किसी भी मदद की सराहना की जाती है!
विधि नहीं ढूंढ सकता 'android.util.Base64.encodeBase64String (...) ' –