2012-04-12 10 views
27

तो इस पोस्ट को पढ़ने: How can I calculate the SHA-256 hash of a string in Android?करता है हर एंड्रॉयड फोन समर्थन SHA-256

और डॉक्स: http://developer.android.com/reference/java/security/MessageDigest.html

मैं उत्सुक हूँ; कौन सा फोन SHA-256 का समर्थन करेगा? दस्तावेज़ों में, 'NoSuchAlgorithmException' के बारे में रेखा मुझे सोचती है कि कुछ फोन सभी एल्गोरिदम का समर्थन नहीं करते हैं। इससे पहले कि मैं इसे ऐप के लिए कार्यान्वित करने से पहले और सभी फोनों पर काम करने की उम्मीद कर रहा हूं, मैं जानना चाहता हूं कि क्या कोई इस बारे में कुछ जानता है ...?

मुझे यह अजीब लगता है कि MessageDigest क्लास में आपके द्वारा उपयोग किए जाने वाले एल्गोरिदम को चुनने के लिए कुछ स्थिरांक नहीं हैं।

+5

+1 अच्छा प्रश्न है। मैं पूरी तरह से सहमत हूं कि स्थिरांक होना चाहिए। –

उत्तर

23

सभी एंड्रॉइड डिवाइस SHA-256 का समर्थन करते हैं। NoSuchAlgorithmException इंगित करता है कि एक अनुरोधित एल्गोरिदम नहीं मिला और आवश्यक है क्योंकि विधि एल्गोरिदम नाम के लिए String तर्क लेती है। यदि आप "foo-256" में पास हुए हैं, तो विधि का एकमात्र सहारा NoSuchAlgorithmException फेंकना है क्योंकि, मेरी समझ से परे कारणों के लिए, "foo-256" नामक कोई एल्गोरिदम नहीं है। मान लें कि आप किसी नाम से गुजर रहे हैं, आपको यकीन है कि एंड्रॉइड एक एल्गोरिदम है जिसका उपयोग एंड्रॉइड कर सकता है, आप कभी भी उस अपवाद को नहीं देख पाएंगे।

+1

जबकि मैं अधिकतर सहमत हूं, आप 100% सुनिश्चित नहीं हो सकते हैं कि * सभी * डिवाइस SHA-256 का समर्थन करते हैं। हालांकि, संभावना है कि कोई कुछ बाइट्स को बचाने और इसे बाहर निकालने का फैसला कर सकता है। विशेष रूप से, जब तक कि डिवाइस में मार्केट/प्ले ऐप न हो, तब तक एंड्रॉइड को समर्थन देने के लिए कोई स्पष्ट परिभाषा नहीं है। अगर आपको यह सुनिश्चित करने की ज़रूरत है तो आप हमेशा इस तरह के कुछ के साथ समर्थित एल्गोरिदम/तंत्र सूचीबद्ध कर सकते हैं: http://stackoverflow.com/questions/3683302/how-to-find-out-what-algorithm-encryption-are-supported-by -my-jvm –

+3

अच्छी तरह से: 1. एंड्रॉइड ने कभी भी जेडीके का उपयोग नहीं किया है: कोर लाइब्रेरीज़ (कुछ अपाचे हार्मनी से व्युत्पन्न) और जेवीएम (दलविक) दोनों ही हैं। 2. 'MessageDigest' सिर्फ एक जेसीई इंटरफ़ेस है, SHA-256, MD5 या जो कुछ भी उपयोग करने में सक्षम होने के लिए, वहां' प्रदाता 'होने की आवश्यकता है जो उन एल्गोरिदम लागू करता है। एंड्रॉइड का जेसीई प्रदाता बाउंसीकास्टल से लिया गया है और विशेष रूप से पहले के एंड्रॉइड संस्करणों पर काफी अलग हो गया है। निर्माता दोनों ढांचे को कभी-कभी काफी आक्रामक रूप से अनुकूलित करते हैं। इसमें सिस्टम जेसीई प्रदाता भी शामिल हो सकता है। –

+3

आप वास्तव में बिंदु खो रहे हैं: इंटरफ़ेस! = कार्यान्वयन। –

12

के रूप में नीचे NoSuchAlgorithmException जोड़ें:

public static String SHA256 (String text) throws NoSuchAlgorithmException { 

    MessageDigest md = MessageDigest.getInstance("SHA-256"); 

    md.update(text.getBytes()); 
    byte[] digest = md.digest(); 

    return Base64.encodeToString(digest, Base64.DEFAULT); 
} 
4

SHA-256withRSA पुराने Android संस्करण में समर्थित नहीं है (एंड्रॉयड 4.0.3, 4.1.1 में एक ही सत्यापित)। जेएससीईपी का उपयोग करते समय मैंने इस समस्या का अनुभव किया है। एससीईपी सर्वर द्वारा लौटाया गया पाचन एल्गोरिदम SHA-256 है। लेकिन SHA-256withRSA उन एंड्रॉइड संस्करणों में किसी भी डिफ़ॉल्ट सुरक्षा प्रदाता में मौजूद नहीं है। एक प्रासंगिक लिंक मिल गया: Which versions of Android support which package signing algorithms?

यह लिंक पता चलता है कि एस एच ऐ 256withRSA बाद में जोड़ा गया है: https://android-review.googlesource.com/44360

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