Я не разбираюсь в криптографии и статья выложена только для ознакомления.
Android имеет в своём составе пакет javax.crypto с классами, которые отвечают за шифрование, дешифрование, ключи и т.п. Если вы занимались этой темой в Java, то многое будет знакомо. Поддерживаются популярные алгоритмы AES и RSA.
Список провайдеров
Для начала получим список провайдеров и поддерживаемые ими сервисы и алгоритмы.
Код по щелчку кнопки
Симметричное шифрование AES
Популярный алгоритм симметричного шифрования Advanced Encryption Standard (AES).
Зададим тестовую строку, зашифруем и расшифруем её.
Весь процесс происходит в методе onCreate():
Ассиметричное шифрование RSA
Разметку оставляем без изменений. Используем другой алгоритм RSA:
Я хочу зашифровать изображение с SD-карты и снова сохранить его на SD-карте с помощью AES. Основная идея заключается в том, что приложение просматривает изображение, а затем шифрует его, когда я нажимаю кнопку, а затем сохраняю ее на SD-карте. Поэтому мое изображение будет безопасным.
Мне уже удалось выполнить строковое шифрование с использованием AES из этого учебника , но у меня нет идеи, как это сделать с изображением, а не с строкой.
Вот как я делаю это со строкой:
Может ли кто-нибудь помочь мне привести пример кода, как зашифровать изображение с помощью AES?
Возможно, он должен использовать поток файлов ввода-вывода, но у меня нет идеи, как реализовать этот код.
Если вы берете пользовательский ввод пароля, обязательно прочитайте этот ответ .
Вы должны взглянуть на: CipherInputStream и CipherOutputStream . Они используются для шифрования и дешифрования байтовых потоков.
У меня есть файл с именем cleartext . Файл содержит:
Теперь у вас есть функция encrypt() :
После выполнения этой функции должны быть encrypted имена файлов. Файл содержит зашифрованные символы.
Для дешифрования у вас есть функция decrypt :
После выполнения дешифрования должен быть файл с decrypted . Этот файл содержит свободный текст.
Вы пишете, что вы «noob», но в зависимости от прецедента шифрования вы можете нанести большой вред, если не делаете это правильно. Знай свои инструменты!
Использование документации CipherOutputStream Oracle :
Таким образом, шифрование должно работать. Когда вы меняете процесс, вы должны иметь возможность читать дешифрованные байты.
пример
В следующем примере шифруется данный блок данных с использованием AES . Ключ шифрования выведен безопасным способом (случайная соль, 1000 раундов SHA-256). Шифрование использует AES в режиме CBC со случайным IV .
Обратите внимание, что данные, хранящиеся в классе EncryptedData ( salt , iv и encryptedData ), могут быть объединены в один массив байтов. Затем вы можете сохранить данные или передать их получателю.
Следующий пример кода показывает, как тестировать шифрование и дешифрование: