package Ġcom . pac en ow . exam . core . security Ċ Ċ import Ġcom . pac en ow . exam . core . extensions . log Error Ċ import Ġjava . security . Secure Random Ċ import Ġjava . util .* Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . SecretKey Factory Ċ import Ġjavax . crypto . spec . Iv Parameter Spec Ċ import Ġjavax . crypto . spec . P BE KeySpec Ċ import Ġjavax . crypto . spec . SecretKey Spec Ċ Ċ object ĠEncryption Ġ{ ĊĊĠĠĠ Ġfun Ġencrypt ( ĊĠĠĠĠĠĠĠ Ġdata To Encrypt : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġpassword : ĠChar Array ĊĠĠĠ Ġ): ĠHashMap < String , ĠByteArray >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠByteArray >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠSecure Random () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsalt Ġ= ĠByteArray ( 2 5 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom . next Bytes ( salt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpb KeySpec Ġ= ĠP BE KeySpec ( password , Ġsalt , Ġ 1 3 2 4 , Ġ 2 5 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecret Key Factory Ġ= ĠSecret Key Factory . getInstance (" PB K DF 2 With H mac SHA 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Bytes Ġ= Ġsecret Key Factory . generate Secret ( pb KeySpec ). encoded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Spec Ġ= ĠSecret KeySpec ( key Bytes , Ġ" AES ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiv Random Ġ= ĠSecure Random () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiv Ġ= ĠByteArray ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Random . next Bytes ( iv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiv Spec Ġ= ĠI v Parameter Spec ( iv ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance (" AES / CBC / PKCS 7 Padding ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . ENCRYPT _ MODE , Ġkey Spec , Ġiv Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Ġ= Ġcipher . do Final ( data To Encrypt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" salt "] Ġ= Ġsalt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" iv "] Ġ= Ġiv ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" encrypted "] Ġ= Ġencrypted ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdecrypt ( ĊĠĠĠĠĠĠĠ Ġmap : ĠHashMap < String , ĠByteArray >, ĊĠĠĠĠĠĠĠ Ġpassword : ĠChar Array ĊĠĠĠ Ġ): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdecrypted : ĠByteArray ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsalt Ġ= Ġmap [" salt "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiv Ġ= Ġmap [" iv "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Ġ= Ġmap [" encrypted "] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpb KeySpec Ġ= ĠP BE KeySpec ( password , Ġsalt , Ġ 1 3 2 4 , Ġ 2 5 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecret Key Factory Ġ= ĠSecret Key Factory . getInstance (" PB K DF 2 With H mac SHA 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Bytes Ġ= Ġsecret Key Factory . generate Secret ( pb KeySpec ). encoded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Spec Ġ= ĠSecret KeySpec ( key Bytes , Ġ" AES ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance (" AES / CBC / PKCS 7 Padding ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiv Spec Ġ= ĠI v Parameter Spec ( iv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . DE CRYPT _ MODE , Ġkey Spec , Ġiv Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypted Ġ= Ġcipher . do Final ( encrypted ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypted ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }