package Ġsk . stub a . fe i . u im . mob v _ project . utils Ċ Ċ import Ġandroid . util . Base 6 4 Ċ import Ġjava . security . Secure Random Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . Cipher . DE CRYPT _ MODE Ċ import Ġjavax . crypto . Cipher . ENCRYPT _ MODE Ċ import Ġjavax . crypto . SecretKey Ċ import Ġjavax . crypto . SecretKey Factory Ċ import Ġjavax . crypto . spec . Iv Parameter Spec Ċ import Ġjavax . crypto . spec . P BE KeySpec Ċ Ċ object ĠCipher Utils Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval Ġcipher Algorithm Ġ= Ġ" AES " ĊĠĠĠ Ġprivate Ġconst Ġval Ġcipher Algorithm Mode Ġ= Ġ" CTR " ĊĠĠĠ Ġprivate Ġconst Ġval Ġcipher Algorithm Padding Ġ= Ġ" PKCS 7 Padding " ĊĠĠĠ Ġprivate Ġconst Ġval Ġcipher Transformation Ġ= Ġ"$ cipher Algorithm /$ cipher Algorithm Mode /$ cipher Algorithm Padding " ĊĊĠĠĠ Ġprivate Ġconst Ġval Ġsecret Key Der ivation Algorithm Ġ= Ġ" PB K DF 2 With H mac SHA 2 5 6 " ĊĠĠĠ Ġprivate Ġconst Ġval Ġsecure Random Algorithm Ġ= Ġ" SHA 1 PR NG " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent ĠString Ġto Ġbe Ġencrypted ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword ĠString Ġto Ġbe Ġused Ġfor Ġkey Ġder ivation ĊĠĠĠĠ Ġ* Ġ@ param Ġsalt Ġget Ġby Ġcalling Ġ[ getS alt ] ĊĠĠĠĠ Ġ* Ġ@ param Ġiv Ġget Ġby Ġcalling Ġ[ get Iv ] ĊĠĠĠĠ Ġ* Ġ@ return Ġencrypted Ġcontent Ġencoded Ġin ĠBase 6 4 Ġformat ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencrypt ( content : ĠString , Ġpassword : ĠString , Ġsalt : ĠString , Ġiv : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġencode ToString ( cipher ( ENCRYPT _ MODE , Ġcontent . toByteArray (), Ġpassword , Ġsalt , Ġiv )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShort cut Ġfor Ġ[ encrypt ] Ġwhich Ġdoes Ġnot Ġrequire Ġuser Ġto Ġgenerate Ġsalt Ġand Ġiv Ġbefore Ġcalling . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent ĠString Ġto Ġbe Ġencrypted ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword ĠString Ġto Ġbe Ġused Ġfor Ġkey Ġder ivation ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Encrypt Result ] Ġcontaining Ġencrypted Ġcontent Ġencoded Ġin ĠBase 6 4 Ġformat , Ġsalt Ġand Ġiv ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencrypt ( content : ĠString , Ġpassword : ĠString ): ĠEncrypt Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsalt Ġ= Ġget Salt () ĊĠĠĠĠĠĠĠ Ġval Ġiv Ġ= Ġget Iv () ĊĠĠĠĠĠĠĠ Ġval Ġencrypted Content Ġ= Ġencrypt ( content , Ġpassword , Ġsalt , Ġiv ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠEncrypt Result ( encrypted Content , Ġsalt , Ġiv ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Ġencrypted Ġ[ ByteArray ] Ġencoded Ġin ĠBase 6 4 Ġformat ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword ĠString Ġto Ġbe Ġused Ġfor Ġkey Ġder ivation ĊĠĠĠĠ Ġ* Ġ@ param Ġsalt Ġreuse Ġsalt Ġfrom Ġencrypt Ġprocess ĊĠĠĠĠ Ġ* Ġ@ param Ġiv Ġreuse Ġiv Ġfrom Ġencrypt Ġprocess ĊĠĠĠĠ Ġ* Ġ@ return Ġdecrypted Ġcontent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecrypt ( content : ĠString , Ġpassword : ĠString , Ġsalt : ĠString , Ġiv : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( cipher ( DE CRYPT _ MODE , Ġdecode To ByteArray ( content ), Ġpassword , Ġsalt , Ġiv )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠBase 6 4 Ġencoded Ġsalt Ġ[ ByteArray ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Salt (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsalt Ġ= ĠByteArray ( 2 5 6 ) ĊĠĠĠĠĠĠĠ Ġget Secure Random (). next Bytes ( salt ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġencode ToString ( salt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠBase 6 4 Ġencoded Ġiv Ġ[ ByteArray ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Iv (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiv Ġ= ĠByteArray ( 1 6 ) ĊĠĠĠĠĠĠĠ Ġget Secure Random (). next Bytes ( iv ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġencode ToString ( iv ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġencode ToString ( byteArray : ĠByteArray ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( byteArray , ĠBase 6 4 . DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecode To ByteArray ( base 6 4 String : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . decode ( base 6 4 String , ĠBase 6 4 . DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcipher ( mode : ĠInt , Ġcontent : ĠByteArray , Ġpassword : ĠString , Ġsalt : ĠString , Ġiv : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance ( cipher Transformation ) ĊĠĠĠĠĠĠĠ Ġval Ġsalt ByteArray Ġ= Ġdecode To ByteArray ( salt ) ĊĠĠĠĠĠĠĠ Ġval Ġiv Parameter Spec Ġ= ĠI v Parameter Spec ( decode To ByteArray ( iv )) ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠgetKey From Password ( password . toCharArray (), Ġsalt ByteArray ) ĊĊĠĠĠĠĠĠĠ Ġcipher . init ( mode , Ġkey , Ġiv Parameter Spec ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcipher . do Final ( content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetKey From Password ( password : ĠChar Array , Ġsalt : ĠByteArray ): ĠSecret Key Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp be KeySpec Ġ= ĠP BE KeySpec ( password , Ġsalt , Ġ 1 3 2 5 , Ġ 2 5 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠSecret Key Factory . getInstance ( secret Key Der ivation Algorithm ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfactory . generate Secret ( p be KeySpec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Secure Random (): ĠSecure Random Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSecure Random . getInstance ( secure Random Algorithm ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠEncrypt Result ( ĊĠĠĠĠĠĠĠ Ġval Ġencrypted Content : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġsalt : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġiv : ĠString ĊĠĠĠ Ġ) Ċ }