2013-10-03 4 views
3

Я использовал код в своем приложении для шифрования и дешифрования паролей. Он отлично работал, пока я не заметил, что он терпит неудачу. Единственное изменение, которое я помню, это обновить ADT и eclipse несколько дней назад до последней версии. Не знаю, почему это происходит сейчас. Он работает, если я создаю новые шифровки. Но если я использую какой-то зашифрованный пароль, который был сгенерирован ранее, и передаем его в код ниже для дешифрования, тогда возникает ошибка. Он не работает в строке «byte [] plainBytes = cipher.doFinal (cipherBytes)»;не удалось расшифровать

Мой дешифрования код ниже

 String keyword = "keyword"; 
     int iterationCount = 1000; 
     int keyLength = 256; 
     String[] fields = encryptedPassword.split("]"); 
     byte[] salt = fromBase64(fields[0]); 
     byte[] cipherBytes = fromBase64(fields[1]); 
     KeySpec keySpec = new PBEKeySpec(keyword.toCharArray(), salt, iterationCount, keyLength); 
     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWITHSHA256AND256BITAES-CBC-BC"); 
     SecretKey key = keyFactory.generateSecret(keySpec); 
     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, iterationCount); 
     cipher.init(Cipher.DECRYPT_MODE, key, pbeSpec); 
     byte[] plainBytes = cipher.doFinal(cipherBytes); 
     plainStr = new String(plainBytes, "UTF-8").trim(); 
     return plainStr; 

и ошибка я получаю ниже

java.lang.RuntimeException: javax.crypto.BadPaddingException: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt 

Может кто-нибудь, пожалуйста, помогите здесь

ответ

0

Разобрался в чем проблема. Я обновил версию jdk с 1,6 до 1,7. Это был преступник. Поскольку я использую классы javax.crypto, любое изменение версии заставляло шифрование также слегка меняться.

+0

Хорошо, после отправки моего ответа, я провел дальнейшие испытания и обнаружил, что версия jdk не является проблемой. Все еще пытаясь разобраться в проблеме, – user1938357

+0

удалось решить проблему. Я установил новую установку ADT, и, похоже, она работает. – user1938357

0

Я не эксперт в области безопасности, но считаю, что PBEWithSHA256And256BitAES-CBC-BC - это PKCS # 12, тогда как вы получаете ключи, используя PKCS # 5. Возможно, если вам нужно предоставить тот же алгоритм в Cipher.getInstance().

+0

OP- это решение работает для вас? – IcedDante

Смежные вопросы