Ошибка чтения файла из кеша с Bouncy Castle - PullRequest
0 голосов
/ 08 октября 2018

Используя следующий код:

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 (PaddedBufferedBryc. comg..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 голосов
/ 08 октября 2018

У вас есть зашифрованная файловая система, в которую вы записали или прочитали до того, как шифрование было активировано в методе init (Object), возможно, через статический инициализатор, push callback или что-то в этом роде.

Необходимо убедиться, что EncryptedStorage.install() происходит, прежде чем вы получите доступ к хранилищу, будь то чтение или запись.

...