package Ġcom . kaz ak ago . crypt ore . sample kotlin Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . support . design . widget . TextInput Layout Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . util . Base 6 4 Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . Toast Ċ import Ġcom . kaz ak ago . crypt ore . Cipher Algorithm Ċ import Ġcom . kaz ak ago . crypt ore . Crypt ore Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠAlias ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRSA (" CIPHER _ RSA "), ĊĠĠĠĠĠĠĠ ĠAES (" CIPHER _ AES ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcrypt ore RSA : ĠCrypt ore Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠCrypt ore . Builder ( alias Ġ= ĠAlias . RSA . value , Ġtype Ġ= ĠCipher Algorithm . RSA ) ĊĠĠĠĠĠĠĠ Ġbuilder . context Ġ= Ġthis Ġ// Need ĠOnly ĠRSA Ġon Ġbelow ĠAPI ĠL v 2 2 . Ċ // ĠĠĠĠĠĠĠ Ġbuilder . block Mode Ġ= ĠBlock Mode . E CB Ġ// If ĠN eeded . Ċ // ĠĠĠĠĠĠĠ Ġbuilder . encryption Padding Ġ= ĠEncryption Padding . RSA _ PKCS 1 Ġ// If ĠN eeded . ĊĠĠĠĠĠĠĠ Ġbuilder . build () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġcrypt ore AES : ĠCrypt ore Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠCrypt ore . Builder ( alias Ġ= ĠAlias . AES . value , Ġtype Ġ= ĠCipher Algorithm . AES ) Ċ // ĠĠĠĠĠĠĠ Ġbuilder . block Mode Ġ= ĠBlock Mode . CBC Ġ// If ĠN eeded . Ċ // ĠĠĠĠĠĠĠ Ġbuilder . encryption Padding Ġ= ĠEncryption Padding . PKCS 7 Ġ// If ĠN eeded . ĊĠĠĠĠĠĠĠ Ġbuilder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoriginal Input Ġ= ĠfindViewById < TextInput Layout >( R . id . input _ original ) ĊĠĠĠĠĠĠĠ Ġval Ġencrypted Input Ġ= ĠfindViewById < TextInput Layout >( R . id . input _ encrypted ) ĊĠĠĠĠĠĠĠ Ġval Ġdecrypted Input Ġ= ĠfindViewById < TextInput Layout >( R . id . input _ de crypted ) ĊĊĠĠĠĠĠĠĠ Ġval Ġencrypt RS AB utton Ġ= ĠfindViewById < Button >( R . id . button _ encrypt _ rsa ) ĊĠĠĠĠĠĠĠ Ġencrypt RS AB utton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Str Ġ= Ġencrypt RSA ( plain Str Ġ= Ġoriginal Input . edit Text ?. text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Input . edit Text ?. setText ( encrypted Str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġencrypt AES Button Ġ= ĠfindViewById < Button >( R . id . button _ encrypt _ aes ) ĊĠĠĠĠĠĠĠ Ġencrypt AES Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Str Ġ= Ġencrypt AES ( plain Str Ġ= Ġoriginal Input . edit Text ?. text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Input . edit Text ?. setText ( encrypted Str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdecrypt RS AB utton Ġ= ĠfindViewById < Button >( R . id . button _ decrypt _ rsa ) ĊĠĠĠĠĠĠĠ Ġdecrypt RS AB utton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypted Str Ġ= Ġdecrypt RSA ( encrypted Str Ġ= Ġencrypted Input . edit Text ?. text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypted Input . edit Text ?. setText ( de crypted Str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdecrypt AES Button Ġ= ĠfindViewById < Button >( R . id . button _ decrypt _ aes ) ĊĠĠĠĠĠĠĠ Ġdecrypt AES Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypted Str Ġ= Ġdecrypt AES ( encrypted Str Ġ= Ġencrypted Input . edit Text ?. text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypted Input . edit Text ?. setText ( de crypted Str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġencrypt RSA ( plain Str : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplain Byte Ġ= Ġplain Str . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcrypt ore RSA . encrypt ( plain Byte Ġ= Ġplain Byte ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( result . bytes , ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġe . localized Message , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecrypt RSA ( encrypted Str : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Byte Ġ= ĠBase 6 4 . decode ( encrypted Str , ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcrypt ore RSA . decrypt ( encrypted Byte Ġ= Ġencrypted Byte ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( result . bytes ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġe . localized Message , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġencrypt AES ( plain Str : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplain Byte Ġ= Ġplain Str . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcrypt ore AES . encrypt ( plain Byte Ġ= Ġplain Byte ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher IV Ġ= Ġresult . cipher IV ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( result . bytes , ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġe . localized Message , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecrypt AES ( encrypted Str : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Byte Ġ= ĠBase 6 4 . decode ( encrypted Str , ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcrypt ore AES . decrypt ( encrypted Byte Ġ= Ġencrypted Byte , Ġcipher IV Ġ= Ġcipher IV ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( result . bytes ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġe . localized Message , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcipher IV : ĠByteArray ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . getString (" cipher _ iv ", Ġnull )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . decode ( it , ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġpreferences . edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString (" cipher _ iv ", ĠBase 6 4 . encode ToString ( value , ĠBase 6 4 . DEFAULT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ