के बीच अंतर मैं एंड्रॉइड पर उपयोगकर्ता नाम और पासवर्ड एन्क्रिप्ट करने के लिए आरएसए का उपयोग कर रहा हूं और उन्हें सर्वर (टॉमकैट 6, जावा 1.6) पर डिक्रिप्ट कर रहा हूं। एंड्रॉयड एन्क्रिप्शन:आरएसए एन्क्रिप्शन: जावा और एंड्रॉइड
PublicKey pubKey = readPublicKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
जावा बिलाव डिक्रिप्शन:
PrivateKey pubKey = readPrivateKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
अगर मैं एंड्रॉयड हिस्सा बाहर एंड्रॉयड (बस एक मुख्य विधि में) का उपयोग यह ठीक काम करता है। लेकिन मेरे एंड्रॉइड (एम्यूलेटर) के अंदर नहीं। डी सर्वर साइड पर मैं निम्नलिखित त्रुटि मिलती है:
javax.crypto.BadPaddingException: Blocktype mismatch: 0
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:311)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:255)
at com.sun.crypto.provider.RSACipher.a(DashoA13*..)
at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
मैं BigIntegers स्थिरांक के रूप में आधुनिक और पूर्व रखें ताकि मैं उन्हें एक फाइल करने के लिए में नहीं लिखते। मुझे पता है कि जावा 1.6 और जावा 1.5 एन्क्रिप्शन के बीच अंतर है, इसलिए दोनों जावा 1.6 के साथ संकलित हैं।
कुछ डिबग जानकारी:
एंड्रॉयड में डिबग के दौरान मैं देख सकता हूँ कि pubKey हेक्साडेसिमल में मापांक और प्रतिपादक शामिल हैं। और यदि मैं एक मुख्य विधि (फिर एक ही कोड) में डीबग करता हूं तो मैं देख सकता हूं कि पबके में दशमलव में मॉड्यूलस और एक्सपोनेंट होता है।
मैं क्या गलत कर रहा हूं?
धन्यवाद
संभावित डुप्लिकेट: http: // stackoverflow।कॉम/प्रश्न/4926126/आरएसए-एन्क्रिप्शन-इन-जावा-क्रॉस-प्लेटफ़ॉर्म-मुद्दे –
क्या आप वाकई आपको निजी कुंजी 'पबकी' कहते हैं? क्या यह वाकई कोड है या सिर्फ स्मृति से प्रश्न में टाइप किया है? –
** चेतावनी ** नए प्रोटोकॉल के लिए, कोशिश करें और इसके बजाय ओएईपी पैडिंग का उपयोग करें। पीकेसीएस # 1 पैडिंग ऑरैकल हमलों के लिए कमजोर है। –