Как зашифровать файл с SD-карты с помощью AES на Android?

Я хочу зашифровать изображение с SD-карты и снова сохранить его на SD-карте с помощью AES. Основная идея заключается в том, что приложение просматривает изображение, а затем шифрует его, когда я нажимаю кнопку, а затем сохраняю его на SD-карте. поэтому мое изображение будет безопасным.

Мне уже удалось выполнить строковое шифрование с использованием AES из этого учебника http://www.androidsnippets.com/encryptdecrypt-strings , но у меня нет идеи, как это сделать с изображением, а не с строкой.

Вот как я делаю это со строкой:

public static String encrypt(String seed, String cleartext) throws Exception { byte[] rawKey = getRawKey(seed.getBytes()); byte[] result = encrypt(rawKey, cleartext.getBytes()); return toHex(result); } private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(clear); return encrypted; } 

Может ли кто-нибудь помочь мне привести пример кода, как зашифровать изображение с помощью AES?

возможно, он должен использовать stream файлов ввода-вывода, но у меня нет идеи, как реализовать этот код.

One Solution collect form web for “Как зашифровать файл с SD-карты с помощью AES на Android?”

Если вы берете пользовательский ввод пароля, обязательно прочитайте этот ответ .

Вы должны взглянуть на: CipherInputStream и CipherOutputStream . Они используются для шифрования и дешифрования streamов байтов.

У меня есть файл с именем cleartext . Файл содержит:

 Hi, I'm a clear text. How are you? That's awesome! 

Теперь у вас есть функция encrypt() :

 static void encrypt() throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { // Here you read the cleartext. FileInputStream fis = new FileInputStream("data/cleartext"); // This stream write the encrypted text. This stream will be wrapped by another stream. FileOutputStream fos = new FileOutputStream("data/encrypted"); // Length is 16 byte // Careful when taking user input!!! https://stackoverflow.com/a/3452620/1188357 SecretKeySpec sks = new SecretKeySpec("MyDifficultPassw".getBytes(), "AES"); // Create cipher Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, sks); // Wrap the output stream CipherOutputStream cos = new CipherOutputStream(fos, cipher); // Write bytes int b; byte[] d = new byte[8]; while((b = fis.read(d)) != -1) { cos.write(d, 0, b); } // Flush and close streams. cos.flush(); cos.close(); fis.close(); } 

После выполнения этой функции имена файлов должны быть encrypted . Файл содержит зашифрованные символы.

Для дешифрования у вас есть функция decrypt :

 static void decrypt() throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { FileInputStream fis = new FileInputStream("data/encrypted"); FileOutputStream fos = new FileOutputStream("data/decrypted"); SecretKeySpec sks = new SecretKeySpec("MyDifficultPassw".getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, sks); CipherInputStream cis = new CipherInputStream(fis, cipher); int b; byte[] d = new byte[8]; while((b = cis.read(d)) != -1) { fos.write(d, 0, b); } fos.flush(); fos.close(); cis.close(); } 

После выполнения дешифрования должен быть файл с decrypted . Этот файл содержит свободный текст.

Вы пишете, что вы «нооб», но в зависимости от прецедента шифрования вы можете нанести большой вред, если не делаете это правильно. Знай свои инструменты!

Использование документации CipherOutputStream Oracle :

 SecretKeySpec skeySpec = new SecretKeySpec(y.getBytes(), "AES"); FileInputStream fis; FileOutputStream fos; CipherOutputStream cos; // File you are reading from fis = new FileInputStream("/tmp/a.txt"); // File output fos = new FileOutputStream("/tmp/b.txt"); // Here the file is encrypted. The cipher1 has to be created. // Key Length should be 128, 192 or 256 bit => ie 16 byte SecretKeySpec skeySpec = new SecretKeySpec("MyDifficultPassw".getBytes(), "AES"); Cipher cipher1 = Cipher.getInstance("AES"); cipher1.init(Cipher.ENCRYPT_MODE, skeySpec); cos = new CipherOutputStream(fos, cipher1); // Here you read from the file in fis and write to cos. byte[] b = new byte[8]; int i = fis.read(b); while (i != -1) { cos.write(b, 0, i); i = fis.read(b); } cos.flush(); 

Таким образом, шифрование должно работать. Когда вы меняете процесс, вы должны иметь возможность читать дешифрованные байты.

  • Шифрование видеофайлов?
  • Шифрование AES для NSString на iPhone
  • mcrypt устарел, какова альтернатива?
  • Как преобразовать String в SecretKey
  • Какой «хороший» алгоритм шифрования блоков имеет самый короткий результат?
  • Как узнать, имеет ли пользователь iPhone в настоящее время набор паролей и шифрование?
  • «Заполнение недопустимо и не может быть удалено» с помощью AesManaged
  • Обфускание идентификатора
  • Разница между кодированием и шифрованием
  • Пароль к ключевой функции, совместимой с командами OpenSSL?
  • получение исключения IllegalBlockSizeException: данные не должны превышать 256 байтов при использовании rsa
  • Interesting Posts

    Установить маршрутизатор netgear в режим AP не может попасть в веб-интерфейс

    Формат валюты Java Java

    Какие аудиоформаты с потерями больше (или меньше) «эффективны»?

    Как получить доступ к разделам EXT2, EX3 и EXT4 в Windows 7?

    Закрепить JSF для обновления страницы / просмотра / формы при открытии через ссылку или кнопку возврата

    Действительно ли Windows 7 дефрагментирует SSD-накопитель, если вы сообщите об этом?

    Удалить , равное удалению?

    Какое определение «интерфейс» в объектно-ориентированном программировании

    Выбор текста в элементе (сродни подсветке мышью)

    Печать шестнадцатеричных цифр со сборкой

    Круговые контрольные бары в IOS

    Как проверить поддержку C ++ 11?

    Должен ли я явно указывать возвращаемое значение malloc ()?

    Как вы разделяете USB-флеш-накопитель?

    Каков самый простой способ конвертировать MPEG видео в формат FLV?

    Давайте будем гением компьютера.