ورود

View Full Version : javax.crypto.BadPaddingException



kobari
دوشنبه 25 بهمن 1389, 12:08 عصر
سلام
من يك متد براي password decryption داشتم كه بخوبي كار مي كرد. بتازگي يك برنامه تخت ويندوز نصب كردم كه در regional and language options تغيراتي ايچاد كرد و از آن پس برنامه من موقع اجرا دچار Exception ميشه. احتمالآ با برگرداندن ستينگهاي regional مشكل برطرف ميشه. ولي من دنبال اين هستم كه برنامه بدون وابستگي به منابع ويندوز كار كنه . كد برنامه و اسنثناء توليد شده بشكل زير است، اگه كسي ايده اي براي حل آن داره ممنون ميشم:




public static String getDecryptedPassword(String encrypted) throws Exception{

if(encrypted == null)
return null;
SecretKeySpec skeySpec = new SecretKeySpec(EncodedKey.getDefaultByteEncodedKey( ), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal( encrypted.getBytes());

return new String(decrypted);
}

javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.AESCipher.engineDoFinal(Da shoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at com.sana.utils.PasswordPanel.getDecryptedPassword( PasswordPanel.java:
276)
...

javaphantom
دوشنبه 25 بهمن 1389, 12:31 عصر
سلام
من يك متد براي password decryption داشتم كه بخوبي كار مي كرد. بتازگي يك برنامه تخت ويندوز نصب كردم كه در regional and language options تغيراتي ايچاد كرد و از آن پس برنامه من موقع اجرا دچار Exception ميشه. احتمالآ با برگرداندن ستينگهاي regional مشكل برطرف ميشه. ولي من دنبال اين هستم كه برنامه بدون وابستگي به منابع ويندوز كار كنه . كد برنامه و اسنثناء توليد شده بشكل زير است، اگه كسي ايده اي براي حل آن داره ممنون ميشم:




public static String getDecryptedPassword(String encrypted) throws Exception{

if(encrypted == null)
return null;
SecretKeySpec skeySpec = new SecretKeySpec(EncodedKey.getDefaultByteEncodedKey( ), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal( encrypted.getBytes());

return new String(decrypted);
}

javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.AESCipher.engineDoFinal(Da shoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at com.sana.utils.PasswordPanel.getDecryptedPassword( PasswordPanel.java:
276)
...



خط آخر رو که داری return می کنی داره ایجاد مشکل می کنه new String(..);

این تغییر رو بدین ببینین چی می شه


return new sun.misc.BASE64Encoder().encode(decrypted );

kobari
سه شنبه 26 بهمن 1389, 21:45 عصر
خط آخر رو که داری return می کنی داره ایجاد مشکل می کنه new String(..);

این تغییر رو بدین ببینین چی می شه


return new sun.misc.BASE64Encoder().encode(decrypted );

آزمايش كردم بازم همان Exception را گرفتم!