package Ġke k me ch . ru . repository . utils Ċ Ċ import Ġandroid . util . Base 6 4 Ċ import Ġke k me ch . ru . repository . Build Config Ċ import Ġjava . io . Unsupported EncodingException Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . security . Invalid Algorithm Parameter Exception Ċ import Ġjava . security . Invalid Key Exception Ċ import Ġjava . security . NoSuch AlgorithmException Ċ import Ġjavax . crypto . Bad Padding Exception Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . Illegal BlockSize Exception Ċ import Ġjavax . crypto . NoSuch Padding Exception Ċ import Ġjavax . crypto . spec . Iv Parameter Spec Ċ import Ġjavax . crypto . spec . SecretKey Spec Ċ Ċ class ĠCrypto Handler Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠSecret Key Ġ= ĠBuild Config . AUTH _ KEY ĊĠĠĠ Ġprivate Ġvar ĠIV Ġ= ĠBuild Config . AUTH _ IV ĊĊĠĠĠ Ġ@ Throws ( ĊĠĠĠĠĠĠĠ ĠNoSuch AlgorithmException :: class , ĊĠĠĠĠĠĠĠ ĠNoSuch Padding Exception :: class , ĊĠĠĠĠĠĠĠ ĠIllegal BlockSize Exception :: class , ĊĠĠĠĠĠĠĠ ĠBad Padding Exception :: class , ĊĠĠĠĠĠĠĠ ĠInvalid Key Exception :: class , ĊĠĠĠĠĠĠĠ ĠUnsupported EncodingException :: class , ĊĠĠĠĠĠĠĠ ĠInvalid Algorithm Parameter Exception :: class ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġencrypt ( message : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsrc Buff Ġ= Ġmessage . toByteArray ( charset (" UTF 8 ")) ĊĠĠĠĠĠĠĠ Ġ// here Ġusing Ġsubstring Ġbecause ĠAES Ġtakes Ġonly Ġ 1 6 Ġor Ġ 2 4 Ġor Ġ 3 2 Ġbyte Ġof Ġkey ĊĠĠĠĠĠĠĠ Ġval Ġs key Spec Ġ= ĠSecret KeySpec ( SecretKey . substring ( 0 , Ġ 3 2 ). toByteArray (), Ġ" AES ") ĊĠĠĠĠĠĠĠ Ġval Ġiv Spec Ġ= ĠI v Parameter Spec ( IV . substring ( 0 , Ġ 1 6 ). toByteArray ()) ĊĠĠĠĠĠĠĠ Ġval Ġe cipher Ġ= ĠCipher . getInstance (" AES / CBC / PKCS 7 Padding ") ĊĠĠĠĠĠĠĠ Ġe cipher . init ( Cipher . ENCRYPT _ MODE , Ġs key Spec , Ġiv Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġdst Buff Ġ= Ġe cipher . do Final ( src Buff ) ĊĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( dst Buff , ĠBase 6 4 . DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( ĊĠĠĠĠĠĠĠ ĠNoSuch AlgorithmException :: class , ĊĠĠĠĠĠĠĠ ĠNoSuch Padding Exception :: class , ĊĠĠĠĠĠĠĠ ĠInvalid Key Exception :: class , ĊĠĠĠĠĠĠĠ ĠInvalid Algorithm Parameter Exception :: class , ĊĠĠĠĠĠĠĠ ĠIllegal BlockSize Exception :: class , ĊĠĠĠĠĠĠĠ ĠBad Padding Exception :: class , ĊĠĠĠĠĠĠĠ ĠUnsupported EncodingException :: class ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġdecrypt ( encrypted : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs key Spec Ġ= ĠSecret KeySpec ( SecretKey . substring ( 0 , Ġ 3 2 ). toByteArray (), Ġ" AES ") ĊĠĠĠĠĠĠĠ Ġval Ġiv Spec Ġ= ĠI v Parameter Spec ( IV . substring ( 0 , Ġ 1 6 ). toByteArray ()) ĊĠĠĠĠĠĠĠ Ġval Ġe cipher Ġ= ĠCipher . getInstance (" AES / CBC / PKCS 7 Padding ") ĊĠĠĠĠĠĠĠ Ġe cipher . init ( Cipher . DE CRYPT _ MODE , Ġs key Spec , Ġiv Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġraw Ġ= ĠBase 6 4 . decode ( encrypted , ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Bytes Ġ= Ġe cipher . do Final ( raw ) ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( original Bytes , ĠCharset . forName (" UTF - 8 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠCrypto Handler ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠCrypto Handler Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠCrypto Handler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }