Проблема шифрования Android / дешифрования - PullRequest
0 голосов
/ 15 марта 2011

Я делаю расшифровку шифрования файла в Android, для этого я использую следующий код

private void encryptFile()
{
    try
    {
        File f = new File(Environment.getExternalStorageDirectory() + "/images.jpg");
        FileInputStream in = new FileInputStream(f);
        byte[] buffer = new byte[100];
        int num = in.read(buffer, 0, 100);
        Encryption mEncryption = new Encryption("test");
        File tempFile = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
        FileOutputStream os = new FileOutputStream(tempFile);
        os.write(mEncryption.encrypt(buffer), 0, 100);
        while(in.read(buffer) != -1)
        {
            os.write(buffer);
        }
        in.close();
        os.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

private void decryptFile()
{
    try
    {
        File f = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
        FileInputStream in = new FileInputStream(f);
        byte[] buffer = new byte[100];
        in.read(buffer, 0, 100);
        Encryption mEncryption = new Encryption("test");
        File tempFile = new File(Environment.getExternalStorageDirectory() + "/images.jpg");
        FileOutputStream os = new FileOutputStream(tempFile);
        os.write(mEncryption.decrypt(buffer), 0, 100);
        while(in.read(buffer) != -1)
        {
            os.write(buffer);
        }
        in.close();
        os.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

, но когда я дешифрую файл, он дает мне IllegalBlockSizeException: last block incomplete in decryption любую идею, почему это происходит?

Редактировать: Я использую это Класс шифрования

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

используемый вами класс шифрования был опубликован в моем блоге, как вы сказали (http://blog.kotowicz.net/2010/09/story-of-android-cryptography-and.html), но в качестве примера того, как вы НЕ ДОЛЖНЫ применять шифрование!У него есть определенные проблемы с заполнением и расширением клавиш, все они упоминаются в блоге.

Этот класс поступает из источника этого класса из проекта Android Remote Notifier.Если вам это действительно нужно, хотя бы используйте исправленную версию http://code.google.com/p/android-notifier/source/browse/trunk/AndroidNotifier/src/org/damazio/notifier/util/Encryption.java - у версии в моем блоге есть серьезные проблемы.

Как упоминал Ник Стронг, вы сталкиваетесь с дополнением - блочные шифры выравниваются поразмер блока, и вы должны учитывать это.

0 голосов
/ 15 марта 2011

Есть много потенциальных проблем с этим кодом. Что такое класс Encryption? Он не является частью стандартного Android SDK. Вы не собираетесь шифровать весь файл? Этот код шифрует только первые 100 байтов. И в этом главная ошибка. Затем код предполагает, что первые 100 байтов входного файла будут содержать зашифрованные данные, это неверное предположение. Зашифрованные данные для начала будут нормализованы к длине блока размера алгоритма шифрования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...