使用以下代码:
List<OfflineCommand> l = (List<OfflineCommand>)Storage.getInstance().readObject(
user + apptID + "-offlineCommandsEnc"
);
if (l != null && l.size() > 0) {
flgSuccess = true;
}
public void init(Object context) {
Preferences.setPreferencesLocation("EncryptedPreferences");
Storage.getInstance().deleteStorageFile(Cookie.STORAGE_NAME);
EncryptedStorage.install("***********");
JSONParser.setUseLongs(true);
}
此错误被引发在第一行:
[EDT] 0:1:27,628-异常:org.bouncycastle.crypto.DataLengthException-解密中的最后一个块不完整 org.bouncycastle.crypto.DataLengthException:解密中的最后一个块不完整 在org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher.doFinal(PaddedBufferedBlockCipher.java:281) 在com.codename1.crypto.EncryptedStorage.createInputStream(EncryptedStorage.java:63) 在com.codename1.io.Storage.readObject(Storage.java:260) 在com.fluency.fluencymobile.server.ServerImpl.verifyActivityExists(ServerImpl.java:709) 在com.fluency.fluencymobile.forms.AppointmentForm.lambda $ new $ 4(AppointmentForm.java:512) 在com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349) 在com.codename1.ui.Button.fireActionEvent(Button.java:570) 在com.codename1.ui.Button.released(Button.java:604) 在com.codename1.ui.Button.pointerReleased(Button.java:708) 在com.codename1.ui.Form.pointerReleased(Form.java:3262) 在com.codename1.ui.Component.pointerReleased(Component.java:4288) 在com.codename1.ui.Display.handleEvent(Display.java:2065) 在com.codename1.ui.Display.edtLoopImpl(Display.java:1043) 在com.codename1.ui.Display.mainEDTLoop(Display.java:961) 在com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
答案 0 :(得分:0)
在init(Object)方法中激活加密之前,您可能已写入或读取了一个加密的文件系统,可能是通过静态初始化程序,推送回调或类似方法进行的。
在进行任何存储访问(无论是读取还是写入)之前,您需要确保EncryptedStorage.install()
发生。