package Ġcom . le ov p . android base . utils . cipher Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . System Clock Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġcom . le ov p . android base . ext s . kotlin . hex To ByteArray Ċ import Ġcom . le ov p . min _ base _ sdk . to HexString LE Ċ import Ġjava . security . Secure Random Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . SecretKey Ċ import Ġjavax . crypto . spec . Iv Parameter Spec ĊĊ Ċ /** Ċ Ġ* ĠAuthor : ĠMichael ĠLe o Ċ Ġ* ĠDate : Ġ 2 0 - 1 2 - 2 1 Ġä¸ĭåįĪ 5 : 3 9 Ċ Ġ* Ċ Ġ* Ġhttps :// stackoverflow . com / questions / 1 3 4 3 3 5 2 9 / android - 4 - 2 - b roke - my - encrypt - decrypt - code - and - the - provided - solutions - dont - work / 3 9 0 0 2 9 9 7 # 3 9 0 0 2 9 9 7 Ċ Ġ*/ Ċ @ Suppress (" unused ", Ġ" We aker Access ") Ċ object ĠAES Util Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠAL G ORITHM _ AES Ġ= Ġ" AES " ĊĠĠĠ Ġprivate Ġconst Ġval ĠC IP HER _ AES Ġ= Ġ" AES / CBC / PKCS 7 Padding " ĊĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ PRE _ SAL T _ LENGTH Ġ= Ġ 4 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncrypt Ġstring Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresult Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencrypt ( plain Text : ĠString , Ġsec Key : ĠString , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠString Ġ= Ġencrypt ( plain Text . toByteArray (), Ġsec Key , Ġuse SHA 5 1 2 ). to HexString LE ( true , Ġ"") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDecrypt Ġstring Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcipher Text ĠNotice Ġthat , Ġthe Ġcipher Ġdata Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecrypt ( cipher Text : ĠString , Ġsec Key : ĠString , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠString Ġ= Ġdecrypt ( cipher Text . hex To ByteArray (), Ġsec Key , Ġuse SHA 5 1 2 ). decode ToString () ĊĊĠĠĠ Ġ// Ġ================================================= ============= ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncrypt Ġstring Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġcan Ġuse Ġyour ĠSecret Key Ġor Ġgenerate Ġit Ġlike Ġthis : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġsec Key : ĠSecret Key Ġ= ĠAES Util . generate Key () ĊĠĠĠĠ Ġ* Ġ// Ġor ĊĠĠĠĠ Ġ* Ġ// Ġval Ġsec Key : ĠSecret Key Ġ= ĠP BK DF 2 Util . generate Key With SHA 5 1 2 (" password ") ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresult Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencrypt ( plain Text : ĠString , Ġsec Key : ĠSecret Key , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠString Ġ= Ġencrypt ( plain Text . toByteArray (), Ġsec Key , Ġuse SHA 5 1 2 ). to HexString LE ( true , Ġ"") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDecrypt Ġstring Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcipher Text ĠNotice Ġthat , Ġthe Ġcipher Ġdata Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ* Ġ@ param Ġsec Key ĠYou Ġmust Ġuse Ġthe Ġsame ĠSecret Key Ġor Ġelse Ġthe Ġde cryption Ġwill Ġbe Ġfailed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecrypt ( cipher Text : ĠString , Ġsec Key : ĠSecret Key , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠString Ġ= Ġdecrypt ( cipher Text . hex To ByteArray (), Ġsec Key , Ġuse SHA 5 1 2 ). decode ToString () ĊĊĠĠĠ Ġ// Ġ================================================= ============= ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncrypt Ġstring Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġplain Text Ġ= Ġ" I Ġhave Ġa Ġdream ." ĊĠĠĠĠ Ġ* Ġval Ġsec Key Ġ= Ġ" I 'm Ġa Ġkey ." ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġencrypted String : ĠString Ġ= ĠAES Util . encrypt ( plain Text , Ġsec Key . toByteArray ()) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted String : ĠString Ġ= ĠAES Util . decrypt ( encrypted String , Ġsec Key . toByteArray ()) ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġencrypt Ġand Ġdecrypt Ġany Ġbinary Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresult Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencrypt ( plain Text : ĠString , Ġsec Key : ĠByteArray , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠString Ġ= Ġencrypt ( plain Text . toByteArray (), Ġsec Key , Ġuse SHA 5 1 2 ). to HexString LE ( true , Ġ"") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDecrypt Ġstring Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġplain Text Ġ= Ġ" I Ġhave Ġa Ġdream ." ĊĠĠĠĠ Ġ* Ġval Ġsec Key Ġ= Ġ" I 'm Ġa Ġkey ." ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġencrypted String : ĠString Ġ= ĠAES Util . encrypt ( plain Text , Ġsec Key . toByteArray ()) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted String : ĠString Ġ= ĠAES Util . decrypt ( encrypted String , Ġsec Key . toByteArray ()) ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġencrypt Ġand Ġdecrypt Ġany Ġbinary Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcipher Text ĠNotice Ġthat , Ġthe Ġcipher Ġdata Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecrypt ( cipher Text : ĠString , Ġsec Key : ĠByteArray , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠString Ġ= Ġdecrypt ( cipher Text . hex To ByteArray (), Ġsec Key , Ġuse SHA 5 1 2 ). decode ToString () ĊĊĠĠĠ Ġ// Ġ================================================= ============= ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncrypt Ġbytes Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġplain Text Ġ= Ġ" I Ġhave Ġa Ġdream ." ĊĠĠĠĠ Ġ* Ġval Ġsec Key Ġ= Ġ" I 'm Ġa Ġkey ." ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġencrypted Bytes : ĠByteArray Ġ= ĠAES Util . encrypt ( plain Text . toByteArray (), Ġsec Key ) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted Bytes : ĠByteArray Ġ= ĠAES Util . decrypt ( encrypted Bytes , Ġsec Key ) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted AsString : ĠString Ġ= Ġdecrypted Bytes . decode ToString () ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġencrypt Ġand Ġdecrypt Ġany Ġbinary Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresult Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencrypt ( plain Bytes : ĠByteArray , Ġsec Key : ĠString , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠByteArray Ġ= Ġencrypt ( plain Bytes , Ġsec Key . toByteArray (), Ġuse SHA 5 1 2 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDecrypt Ġbytes Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġplain Text Ġ= Ġ" I Ġhave Ġa Ġdream ." ĊĠĠĠĠ Ġ* Ġval Ġsec Key Ġ= Ġ" I 'm Ġa Ġkey ." ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġencrypted Bytes : ĠByteArray Ġ= ĠAES Util . encrypt ( plain Text . toByteArray (), Ġsec Key ) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted Bytes : ĠByteArray Ġ= ĠAES Util . decrypt ( encrypted Bytes , Ġsec Key ) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted AsString : ĠString Ġ= Ġdecrypted Bytes . decode ToString () ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġencrypt Ġand Ġdecrypt Ġany Ġbinary Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcipher Bytes ĠNotice Ġthat , Ġthe Ġcipher Ġdata Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecrypt ( cipher Bytes : ĠByteArray , Ġsec Key : ĠString , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠByteArray Ġ= Ġdecrypt ( cipher Bytes , Ġsec Key . toByteArray (), Ġuse SHA 5 1 2 ) ĊĊĠĠĠ Ġ// Ġ================================================= ============= ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncrypt Ġbytes Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġplain Text Ġ= Ġ" I Ġhave Ġa Ġdream ." ĊĠĠĠĠ Ġ* Ġval Ġsec Key : ĠSecret Key Ġ= ĠAES Util . generate Key () ĊĠĠĠĠ Ġ* Ġ// Ġor ĊĠĠĠĠ Ġ* Ġ// Ġval Ġsec Key : ĠSecret Key Ġ= ĠP BK DF 2 Util . generate Key With SHA 5 1 2 (" password ") ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġencrypted Bytes : ĠByteArray Ġ= ĠAES Util . encrypt ( plain Text . toByteArray (), Ġsec Key ) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted Bytes : ĠByteArray Ġ= ĠAES Util . decrypt ( encrypted Bytes , Ġsec Key ) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted AsString : ĠString Ġ= Ġdecrypted Bytes . decode ToString () ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġencrypt Ġand Ġdecrypt Ġany Ġbinary Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresult Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencrypt ( plain Data : ĠByteArray , Ġsec Key : ĠSecret Key , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠByteArray Ġ= Ġencrypt ( plain Data , Ġsec Key . encoded , Ġuse SHA 5 1 2 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDecrypt Ġbytes Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġplain Text Ġ= Ġ" I Ġhave Ġa Ġdream ." ĊĠĠĠĠ Ġ* Ġval Ġsec Key : ĠSecret Key Ġ= ĠAES Util . generate Key () ĊĠĠĠĠ Ġ* Ġ// Ġor ĊĠĠĠĠ Ġ* Ġ// Ġval Ġsec Key : ĠSecret Key Ġ= ĠP BK DF 2 Util . generate Key With SHA 5 1 2 (" password ") ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġencrypted Bytes : ĠByteArray Ġ= ĠAES Util . encrypt ( plain Text . toByteArray (), Ġsec Key ) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted Bytes : ĠByteArray Ġ= ĠAES Util . decrypt ( encrypted Bytes , Ġsec Key ) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted AsString : ĠString Ġ= Ġdecrypted Bytes . decode ToString () ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġencrypt Ġand Ġdecrypt Ġany Ġbinary Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcipher Bytes ĠNotice Ġthat , Ġthe Ġcipher Ġdata Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecrypt ( cipher Bytes : ĠByteArray , Ġsec Key : ĠSecret Key , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠByteArray Ġ= Ġdecrypt ( cipher Bytes , Ġsec Key . encoded , Ġuse SHA 5 1 2 ) ĊĊĠĠĠ Ġ// Ġ================================================= ============= ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncrypt Ġbytes Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġplain Text Ġ= Ġ" I Ġhave Ġa Ġdream ." ĊĠĠĠĠ Ġ* Ġval Ġsec Key Ġ= Ġ" I 'm Ġa Ġkey ." ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġencrypted Bytes : ĠByteArray Ġ= ĠAES Util . encrypt ( plain Text . toByteArray (), Ġsec Key . toByteArray ()) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted Bytes : ĠByteArray Ġ= ĠAES Util . decrypt ( encrypted Bytes , Ġsec Key . toByteArray ()) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted AsString : ĠString Ġ= Ġdecrypted Bytes . decode ToString () ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġencrypt Ġand Ġdecrypt Ġany Ġbinary Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresult Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencrypt ( plain Data : ĠByteArray , Ġsec Key : ĠByteArray , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance ( CIPHER _ AES ) ĊĠĠĠĠĠĠĠ Ġval Ġsalt : ĠByteArray Ġ= ĠP BK DF 2 Util . generate Salt ( DEFAULT _ PRE _ SAL T _ LENGTH ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġiv : ĠByteArray Ġ= Ġgenerate Iv ( cipher . block Size ) ĊĠĠĠĠĠĠĠ Ġval Ġraw Key : ĠSecret Key Ġ= Ġif Ġ( use SHA 5 1 2 Ġ&& ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP BK DF 2 Util . generate Key With SHA 5 1 2 ( sec Key . to HexString LE ( true , Ġ""), Ġsalt ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP BK DF 2 Util . generate Key With SHA 1 ( sec Key . to HexString LE ( true , Ġ""), Ġsalt ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġiv Params Ġ= ĠI v Parameter Spec ( iv ) ĊĠĠĠĠĠĠĠ Ġval Ġcipher Bytes : ĠByteArray Ġ= Ġcipher . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( Cipher . ENCRYPT _ MODE , Ġraw Key , ĠI v Parameter Spec ( ByteArray ( block Size ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Final ( plain Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsalt Ġ+ Ġcipher Bytes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncrypt Ġbytes Ġwith Ġspecified Ġsecure Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf ĠAPI Ġlevel Ġis Ġless Ġthan ĠAndroid Ġ 8 . 0 ( O re o ) ĠLevel Ġ 2 6 , ĊĠĠĠĠ Ġ* Ġthe Ġparameter Ġ[ use SHA 5 1 2 ] Ġwill Ġbe Ġignored Ġand Ġthe ĠSHA 1 Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġplain Text Ġ= Ġ" I Ġhave Ġa Ġdream ." ĊĠĠĠĠ Ġ* Ġval Ġsec Key Ġ= Ġ" I 'm Ġa Ġkey ." ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġencrypted Bytes : ĠByteArray Ġ= ĠAES Util . encrypt ( plain Text . toByteArray (), Ġsec Key . toByteArray ()) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted Bytes : ĠByteArray Ġ= ĠAES Util . decrypt ( encrypted Bytes , Ġsec Key . toByteArray ()) ĊĠĠĠĠ Ġ* Ġval Ġdecrypted AsString : ĠString Ġ= Ġdecrypted Bytes . decode ToString () ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġencrypt Ġand Ġdecrypt Ġany Ġbinary Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAES Ġallows Ġ 1 2 8 ( 1 6 * 8 ), Ġ 1 9 2 ( 2 4 * 8 ) Ġand Ġ 2 5 6 ( 3 2 * 8 ) Ġbit Ġof Ġkey Ġlength . ĊĠĠĠĠ Ġ* ĠIn Ġother Ġwords Ġ 1 6 , Ġ 2 4 Ġor Ġ 3 2 Ġbyte . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcipher Bytes ĠNotice Ġthat , Ġthe Ġcipher Ġdata Ġincludes Ġthe Ġsalt Ġprefix Ġwhich Ġlength Ġis ĠDEFAULT _ PRE _ SAL T _ LENGTH ( 4 Ġbytes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecrypt ( cipher Bytes : ĠByteArray , Ġsec Key : ĠByteArray , Ġuse SHA 5 1 2 : ĠBoolean Ġ= Ġtrue ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsalt : ĠByteArray Ġ= Ġcipher Bytes . copyOf Range ( 0 , ĠDEFAULT _ PRE _ SAL T _ LENGTH ) ĊĠĠĠĠĠĠĠ Ġval Ġori Cipher Bytes : ĠByteArray Ġ= Ġcipher Bytes . copyOf Range ( DEFAULT _ PRE _ SAL T _ LENGTH , Ġcipher Bytes . size ) ĊĠĠĠĠĠĠĠ Ġval Ġraw Key : ĠSecret Key Ġ= Ġif Ġ( use SHA 5 1 2 Ġ&& ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP BK DF 2 Util . generate Key With SHA 5 1 2 ( sec Key . to HexString LE ( true , Ġ""), Ġsalt ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP BK DF 2 Util . generate Key With SHA 1 ( sec Key . to HexString LE ( true , Ġ""), Ġsalt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCipher . getInstance ( CIPHER _ AES ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( Cipher . DE CRYPT _ MODE , Ġraw Key , ĠI v Parameter Spec ( ByteArray ( block Size ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Final ( ori Cipher Bytes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ================================================= ============= ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġfun Ġgenerate Key By SHA 5 1 2 (): ĠSecret Key Ġ= ĠP BK DF 2 Util . generate Key With SHA 5 1 2 ( System Clock . elapsed Realtime Nan os (). toString ()) ĊĊĠĠĠ Ġfun Ġgenerate Key By SHA 1 (): ĠSecret Key Ġ= ĠP BK DF 2 Util . generate Key With SHA 1 ( System Clock . elapsed Realtime Nan os (). toString ()) ĊĊĠĠĠ Ġfun Ġgenerate Key (): ĠSecret Key Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġgenerate Key By SHA 5 1 2 () Ġelse Ġgenerate Key By SHA 1 () ĊĊĠĠĠ Ġ// Ġ================================================= ============= ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Iv ( length : ĠInt ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiv Ġ= ĠByteArray ( length ) ĊĠĠĠĠĠĠĠ Ġ// ĠDo ĠNOT Ġseed Ġsecure Random ! ĠAutomatically Ġsee ded Ġfrom Ġsystem Ġentropy . ĊĠĠĠĠĠĠĠ ĠSecure Random (). next Bytes ( iv ) ĊĠĠĠĠĠĠĠ Ġreturn Ġiv ĊĠĠĠ Ġ} Ċ }