2
我在使用弹性城堡的J2ME中解密加密文件时出现问题。 我想要做的是选择一个文件进行加密,写入加密文件并尝试将其解密回其原始形式(写入另一个文件以进行验证)。在J2ME中加密和解密文件
我在阅读加密文件时发生此错误。
Stack Trace :
s: pad block corrupted
at j.a(+219)
at e.c(+38)
at e.b(+30)
at com.aaron.midlets.BluetoothServerMidlet.c(+134)
at com.aaron.midlets.BluetoothServerMidlet.b(+161)
at com.aaron.midlets.BluetoothServerMidlet.a(+67)
at com.aaron.midlets.BluetoothServerMidlet.startApp(+105)
at javax.microedition.midlet.MIDletProxy.startApp(MIDletProxy.java:43)
at com.sun.midp.midlet.Scheduler.schedule(Scheduler.java:374)
at com.sun.midp.main.Main.runLocalClass(Main.java:466)
at com.sun.midp.main.Main.main(Main.java:120)
这里是我的代码部分:
private void createEncryptFile() {
FileConnection fc = FileListingUtil.getFile("root1/", "test.encrypt");
try {
fc.create();
readAndEncrypt();
} catch (Exception e) {
}
}
private void readAndEncrypt() {
FileConnection fc = FileListingUtil.getFile("root1/", "test.original");
FileConnection fc2 = FileListingUtil.getFile("root1/", "test.encrypt");
try {
InputStream test = fc.openDataInputStream();
OutputStreamWriter output = new OutputStreamWriter(fc2.openOutputStream());
int fileSize = (int) fc.fileSize();
byte[] imgData = new byte[fileSize];
int bytesRead = 0;
while (bytesRead < fileSize) {
bytesRead += test.read(imgData, bytesRead, fileSize - bytesRead);
}
EncryptorUtil util = new EncryptorUtil("12345678");
try {
byte[] dataE = util.encrypt(imgData);
for (int y = 0; y < dataE.length; ++y) {
output.write((int) dataE[y]);
}
} catch (CryptoException ex) {
ex.printStackTrace();
}
test.close();
output.close();
createDecryptFile();
} catch (IOException ex) {
ex.printStackTrace();
}
}
private void createDecryptFile() {
FileConnection fc = FileListingUtil.getFile("root1/", "test.decrypt");
try {
fc.create();
readAndDecrypt();
} catch (Exception e) {
e.printStackTrace();
}
}
private void readAndDecrypt() {
FileConnection fc = FileListingUtil.getFile("root1/", "test.encrypt");
FileConnection fc2 = FileListingUtil.getFile("root1/", "test.decrypt");
try {
InputStream test = fc.openDataInputStream();
OutputStreamWriter output = new OutputStreamWriter(fc2.openOutputStream());
int fileSize = (int) fc.fileSize();
byte[] imgData = new byte[fileSize];
int bytesRead = 0;
while (bytesRead < fileSize) {
bytesRead += test.read(imgData, bytesRead, fileSize - bytesRead);
}
EncryptorUtil util = new EncryptorUtil("12345678");
try {
byte[] dataE = util.decrypt(imgData);
for (int y = 0; y < dataE.length; ++y) {
output.write((int) dataE[y]);
}
} catch (CryptoException ex) {
ex.printStackTrace();
}
test.close();
output.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
的最后一个函数会抛出异常。
+1 - 很好的捕获。 – 2009-09-13 01:35:57
Thx man ... 它解决了我的问题。 – 2009-09-20 14:36:22