使用Bouncy Castle

时间:2018-10-08 01:40:42

标签: java codenameone bouncycastle

使用以下代码:

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)

1 个答案:

答案 0 :(得分:0)

在init(Object)方法中激活加密之前,您可能已写入或读取了一个加密的文件系统,可能是通过静态初始化程序,推送回调或类似方法进行的。

在进行任何存储访问(无论是读取还是写入)之前,您需要确保EncryptedStorage.install()发生。