android aes加密和解密,在android2.1和2.2下一切正常,可在2.3.3等以上版本却提示错误“java.lang.Exception: pad block corrupted”源码如下:
// 解密文件
public static String DecryptFile(String pwd, File fileIn, File fileOut)
throws Exception {
try {
// 读取文件 FileInputStream fis = new FileInputStream(fileIn);
byte[] bytIn = readbyte(fis); // AES解密
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(256, new SecureRandom(pwd.getBytes()));
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
// 写文件
byte[] bytOut = cipher.doFinal(bytIn);
FileOutputStream fos = new FileOutputStream(fileOut);
InputStream sbs = new ByteArrayInputStream(bytOut);
fos.write(readbyte(sbs));
fos.close();
fis.close();
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return pwd;
} protected static byte[] readbyte(InputStream stream) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream(8196);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = stream.read(buffer)) > 0) {
baos.write(buffer, 0, length);
}
return baos.toByteArray(); } catch (Exception exception) {
return exception.getMessage().getBytes();
}
}使用方法:
String DecryptCode = EncryptfileActivity.DecryptFile(pwd, fileIn,fileOut);
以上使用在android2.1\2.2下一切正常,可在2.3以上版本却报“java.lang.Exception: pad block corrupted”log.txt如下:
06-23 13:21:34.758: W/System.err(1744): java.lang.Exception: pad block corrupted
06-23 13:21:34.767: W/System.err(1744): at DecryptFile(EncryptfileActivity.java:44)
06-23 13:21:34.777: W/System.err(1744): at onCreate(Activity.java:61)
06-23 13:21:34.777: W/System.err(1744): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-23 13:21:34.777: W/System.err(1744): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-23 13:21:34.797: W/System.err(1744): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-23 13:21:34.797: W/System.err(1744): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-23 13:21:34.797: W/System.err(1744): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-23 13:21:34.807: W/System.err(1744): at android.os.Handler.dispatchMessage(Handler.java:99)
06-23 13:21:34.817: W/System.err(1744): at android.os.Looper.loop(Looper.java:123)
06-23 13:21:34.817: W/System.err(1744): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-23 13:21:34.817: W/System.err(1744): at java.lang.reflect.Method.invokeNative(Native Method)
06-23 13:21:34.817: W/System.err(1744): at java.lang.reflect.Method.invoke(Method.java:507)
06-23 13:21:34.817: W/System.err(1744): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-23 13:21:34.827: W/System.err(1744): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-23 13:21:34.827: W/System.err(1744): at dalvik.system.NativeStart.main(Native Method)
06-23 13:21:37.136: D/dalvikvm(1744): GC_EXTERNAL_ALLOC freed 337K, 54% free 2577K/5575K, external 1925K/2137K, paused 85ms
06-23 13:21:37.268: D/dalvikvm(1744): GC_EXTERNAL_ALLOC freed 3K, 54% free 2573K/5575K, external 3425K/4277K, paused 87ms
06-23 13:21:37.387: D/dalvikvm(1744): GC_EXTERNAL_ALLOC freed <1K, 54% free 2575K/5575K, external 4925K/6151K, paused 71ms
其中:
DecryptFile(EncryptfileActivity.java:44) 如下:throw new Exception(e.getMessage());(上面代码的红字部分)
onCreate(Activity.java:61) 如下:String DecryptCode = EncryptfileActivity.DecryptFile(pwd, fileIn,fileOut);这应该怎么处理呢,麻烦大家帮帮忙呀,怎么样才能全版本兼容(开发是在android2.1下做的)急!!谢谢大家
// 解密文件
public static String DecryptFile(String pwd, File fileIn, File fileOut)
throws Exception {
try {
// 读取文件 FileInputStream fis = new FileInputStream(fileIn);
byte[] bytIn = readbyte(fis); // AES解密
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(256, new SecureRandom(pwd.getBytes()));
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
// 写文件
byte[] bytOut = cipher.doFinal(bytIn);
FileOutputStream fos = new FileOutputStream(fileOut);
InputStream sbs = new ByteArrayInputStream(bytOut);
fos.write(readbyte(sbs));
fos.close();
fis.close();
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return pwd;
} protected static byte[] readbyte(InputStream stream) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream(8196);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = stream.read(buffer)) > 0) {
baos.write(buffer, 0, length);
}
return baos.toByteArray(); } catch (Exception exception) {
return exception.getMessage().getBytes();
}
}使用方法:
String DecryptCode = EncryptfileActivity.DecryptFile(pwd, fileIn,fileOut);
以上使用在android2.1\2.2下一切正常,可在2.3以上版本却报“java.lang.Exception: pad block corrupted”log.txt如下:
06-23 13:21:34.758: W/System.err(1744): java.lang.Exception: pad block corrupted
06-23 13:21:34.767: W/System.err(1744): at DecryptFile(EncryptfileActivity.java:44)
06-23 13:21:34.777: W/System.err(1744): at onCreate(Activity.java:61)
06-23 13:21:34.777: W/System.err(1744): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-23 13:21:34.777: W/System.err(1744): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-23 13:21:34.797: W/System.err(1744): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-23 13:21:34.797: W/System.err(1744): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-23 13:21:34.797: W/System.err(1744): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-23 13:21:34.807: W/System.err(1744): at android.os.Handler.dispatchMessage(Handler.java:99)
06-23 13:21:34.817: W/System.err(1744): at android.os.Looper.loop(Looper.java:123)
06-23 13:21:34.817: W/System.err(1744): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-23 13:21:34.817: W/System.err(1744): at java.lang.reflect.Method.invokeNative(Native Method)
06-23 13:21:34.817: W/System.err(1744): at java.lang.reflect.Method.invoke(Method.java:507)
06-23 13:21:34.817: W/System.err(1744): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-23 13:21:34.827: W/System.err(1744): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-23 13:21:34.827: W/System.err(1744): at dalvik.system.NativeStart.main(Native Method)
06-23 13:21:37.136: D/dalvikvm(1744): GC_EXTERNAL_ALLOC freed 337K, 54% free 2577K/5575K, external 1925K/2137K, paused 85ms
06-23 13:21:37.268: D/dalvikvm(1744): GC_EXTERNAL_ALLOC freed 3K, 54% free 2573K/5575K, external 3425K/4277K, paused 87ms
06-23 13:21:37.387: D/dalvikvm(1744): GC_EXTERNAL_ALLOC freed <1K, 54% free 2575K/5575K, external 4925K/6151K, paused 71ms
其中:
DecryptFile(EncryptfileActivity.java:44) 如下:throw new Exception(e.getMessage());(上面代码的红字部分)
onCreate(Activity.java:61) 如下:String DecryptCode = EncryptfileActivity.DecryptFile(pwd, fileIn,fileOut);这应该怎么处理呢,麻烦大家帮帮忙呀,怎么样才能全版本兼容(开发是在android2.1下做的)急!!谢谢大家
解决方案 »
- Android4.0 avd虚拟机报错Failed to allocate memory: 8
- 在Activity中如何捕获长按MENU键的事件
- 有没有办法在模拟器上运行自己编译的launcher?
- 判断一个点,是否在一条直线上。
- 分辨率如何自适应
- 求助android拇指滚动条的实现
- listview 下滑隐藏布局 ,移动到某个敏感的位置, 布局会不停闪烁
- Android 格式化外置SD卡,出现权限问题
- Please ensure that adb is correctly located at
- android 记事本在edittext插入图片重新获取图片问题
- new DialogInterface.OnClickListener();这是神马意思啊。晕!
- 真心求助、关于Notification图标问题
我是Android初学者,一直用4.2的
解密时一直报错。能加不能解!! 好头痛,好烦人的问题
http://blog.csdn.net/wujxiaoz/article/details/9036981
AES加解密在Android 4.2上的Encryption error这个是可以解决下,但在部分少量机型还是有点问题。
---同求完全兼容的方法