2010-12-10 12 views
6

को अपग्रेड करते समय हाल ही में बीसी 1.34 से 1.45 तक अपग्रेड किया गया। मैं निम्नलिखित के साथ कुछ पहले से एन्कोड किया गया डेटा डिकोडिंग हूँ:बाउंसीकास्टल एईएस त्रुटि 1.45

javax.crypto.BadPaddingException: pad block corrupted 
at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(JCEBlockCipher.java:715) 
at javax.crypto.Cipher.doFinal(Cipher.java:1090) 

संपादित करें: इस मुद्दे के बारे में अधिक

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
    Cipher cipher = Cipher.getInstance("AES"); 
    cipher.init(Cipher.DECRYPT_MODE, skeySpec); 
    byte[] decrypted = cipher.doFinal(encrypted); 

ई.पू. 1.45 का उपयोग करते समय मैं इस अपवाद मिलता है। मैं किसी पासफ़्रेज़ से कच्चे कुंजी उत्पन्न करने के लिए निम्न का उपयोग कर रहा:

KeyGenerator kgen = KeyGenerator.getInstance("AES", "BC"); 
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto"); 
    sr.setSeed(seed); 
    kgen.init(128, sr); 
    SecretKey skey = kgen.generateKey(); 
    byte[] raw = skey.getEncoded(); 

क्या मैं ने पाया है कि यह ईसा पूर्व 1.34 बनाम 1.45 के लिए दो अलग-अलग मान में जो परिणाम है।

यह भी नहीं BouncyCastle से संबंधित हो सकता है

उत्तर

3

ऐसा लगता है कि समस्या है ProureRandom Froyo-जिंजरब्रेड सीमा में पोर्टेबल नहीं है। इस पोस्ट में एक ऐसी ही समस्या का वर्णन करता:

http://groups.google.com/group/android-security-discuss/browse_thread/thread/6ec015a33784b925

मुझे यकीन है कि वास्तव में क्या SecureRandom में बदल नहीं हूँ, लेकिन एक ही तरीका है कि मैं इसे ठीक करने के लिए मिला एक पोर्टेबल पद्धति का उपयोग करके जेनरेट कुंजी के साथ डेटा reencrypt गया था।

+0

आप सही हैं। SecureRandom के लिए अनुबंध यह वादा नहीं करता है कि जिस बीज को आप मैन्युअल रूप से आपूर्ति करते हैं वह केवल * बीज * उपयोग करेगा। यह अन्य स्रोतों का उपयोग करेगा, जैसे/dev/linux/lsd पर यादृच्छिक। –

+1

भावी पाठकों के लिए: दूसरे शब्दों में, पीबीकेडीएफ 2 जैसे बदले जाने वाले प्रमुख व्युत्पन्न विधि का उपयोग करें। –

0

(मैं Android 2.3 पर परीक्षण कर रहा हूँ) release notes के अनुसार, इस फिक्स संस्करण 1.40 में शामिल किया गया था:

PKCS7Padding सत्यापन अगर पैड असफल नहीं होता लंबाई 0 थी। यह तय किया गया है।

ऐसा लगता है कि यह उचित हो सकता है।

6

मैंने अभी इसे ट्रैक करना समाप्त कर दिया है। यह एक बग है कि तय किया गया था था engineNextBytes में SHA1PRNG_SecureRandomImpl.java की लाइन 320 (जिंजरब्रेड स्रोत में) पर बग समाधान() विधि जहां

bits = seedLength << 3 + 64; 

bits = (seedLength << 3) + 64; 

जाहिर है में बदल गया था की वजह से , लेकिन इसका मतलब है कि एक ही बीज दिया गया है, SecureRandom विभिन्न डेटा प्री-और पोस्ट-जिंजरब्रेड उत्पन्न करेगा।

मेरे पास इसके लिए "ठीक" है। मैंने एंड्रॉइड -7 से पर्याप्त कोड चुरा लिया ताकि सिक्योररैंडम ने उसी तरह यादृच्छिक बाइट उत्पन्न कर सकें। मैं अपनी जानकारी को डिक्रिप्ट करने का प्रयास करता हूं और यदि यह विफल हो जाता है, तो मेरे जैक अप सिक्योररैंडम का उपयोग इसे डिक्रिप्ट करने के लिए करें। तो मैं स्पष्ट रूप से नए सिक्योररैंडम का उपयोग करके इसे फिर से संपादित कर सकता हूं, हालांकि मैं पूरी तरह से SecureRandom से दूर जाने की सोच रहा हूं ...

+0

मैं एक ही चीज़ को लागू करने की कोशिश कर रहा हूं ... आपने प्रदाता कैसे बनाया? –

+3

@ बेन डेम्बोस्की क्या आप अपना कामकाज पोस्ट कर सकते हैं? यह सबसे उपयोगी होगा – pandre

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