Easy android application for encryption/decryption

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Мое приложение может скрывать текст, указанный в предоставленном изображении, и пользователь этого изображения может свободно отправлять его кому угодно. С помощью этого приложения можно расшифровать одно и то же изображение и извлечь из него данные/текст. Может использоваться как в целях развлечения, так и в целях безопасности.

Как работает

Шифрование

  • Входные данные: код из 16 цифр, текст (который должен быть скрыт), изображение (в котором текст должен быть скрыт).

  • Текст преобразуется в bytearray и передается в шифрование AES с использованием библиотеки шифрования Android.

  • Зашифрованный текст в форме bytearray, преобразуется в кодировку Base64.

  • Каждый символ строки base64 преобразуется в двоичное значение и объединяется в виде строки с завершающей строкой с обеих сторон.

  • Двоичная строка затем вставляется в изображение с помощью метода LSB.

  • Изображение появляется у вас на устройстве.

Дешифрование

  • Входные данные - код из 16 цифр (тот же, что использовался для шифрования),изображение (в котором скрыты данные).

  • Двоичные данные, извлекаются из пикселей изображения, просто изменив процесс метода LSB.

  • Двоичная строка преобразуется обратно в строку base64 и строка base64 снова декодируется в bytearray.

  • Bytearray передается в алгоритм AES, и с помощью ключа данные расшифровываются.

  • Окончательный расшифрованный bytearray преобразуется в текст (utf-8) и отображается на экране.

SplashScreen
SplashScreen
MainActivity
MainActivity
EncryptActivity
EncryptActivity

Примеры кода

1. Шифрование данных и сокрытие их в изображении

encbtn!!.setOnClickListener() {

            if(keytxt!!.text.toString().length==16) {
                if(data_to_hide!!.text.toString().length>0) {
                    if (btm != null) {
                        Thread{
                            runOnUiThread{dialog.show()}
                        //encrypting data using AES encryption
                        val s: String = encrypting_data()
                        //hiding data in image and getting modified img
                        val bitmap:Bitmap=data_hiding_in_img(s, btm!!)
                        //reseting the encrypted binary string for next time use
                        b_string=""
                        //saving stego image to gallary
                        saveMediaToStorage(bitmap)
                        runOnUiThread{dialog.dismiss()}
                        }.start()
                    }
                    else{Toast.makeText(this, "ADD A IMAGE FIRST", Toast.LENGTH_SHORT).show()
                }

            }
                else{ Toast.makeText(this, "Text to hide is empty", Toast.LENGTH_SHORT).show()
                }
        }
            else{
                val k=keytxt!!.text.toString().length
                Toast.makeText(this, "Key must be of 16 digits not $k ", Toast.LENGTH_SHORT).show()
            }

        }

2. Конвертирование закодированной строки в base64 и размещение двоичной строки в изображение

val re_base64 = Base64.encodeToString(re, Base64.NO_WRAP or Base64.NO_PADDING)
        Log.e("aaAA", re_base64.toString())

        //converting each chr of base64 string to binary and combining it
        for(i in re_base64){
            var single_b_string=Integer.toBinaryString((i.toInt()))
            //if binary str is less than 8 bit then making it 8 bit by adding 0's
            if(single_b_string.length<8){
                for(j in 1..(8-single_b_string.length)){
                    single_b_string="0"+single_b_string
                }
            }
            //binary string to hide in image
            b_string= b_string+ single_b_string
        }
        Log.e("barraylength", b_string.toString())
        Log.e("barray", b_string!!.length.toString())
        return b_string.toString()

Это приложение я сделал для участия в конкурсе open source проектов.

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

Источник: https://habr.com/ru/post/658993/


Интересные статьи

Интересные статьи

Привет! Меня зовут Мялкин Максим, я занимаюсь мобильной разработкой в KTS. В 2019 году я вместе с платформой для онлайн-обучения Skillbox начал делать курс для начинающих мобильных разработчиков....
Androids: The team that built the Android operating system — новая книга от инженера Android Чета Хаазе, который работает в команде Android с 2010 года, и для этой книги, предлагающей взглянуть за кул...
Привет, Хабр!Я занимаюсь безопасностью мобильных приложений и с удовольствием слежу за развитием платформ Android и iOS, которые с каждым новым релизом становятся все при...
Маркетплейс – это сервис от 1С-Битрикс, который позволяет разработчикам делиться своими решениями с широкой аудиторией, состоящей из клиентов и других разработчиков.
Перед тем как закончить работу над своим редактором кода я много раз наступал на грабли, наверное декомпилировал десятки похожих приложений, и в данной серии статей я расскажу о том...