package Ġcom . zhang t eng . utils Ċ Ċ import Ġkotlin . Throws Ċ import Ġkotlin . jvm . Synchron ized Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . util . Base 6 4 Ċ import Ġjava . lang . Exception Ċ import Ġjava . security . Key Factory Ċ import Ġjava . security . KeyPair Ċ import Ġjava . security . KeyPair Generator Ċ import Ġjava . security . NoSuch AlgorithmException Ċ import Ġjava . security . spec . PKCS 8 Encoded KeySpec Ċ import Ġjava . security . spec . X 5 0 9 Encoded KeySpec Ċ import Ġjava . util . ArrayList Ċ import Ġjavax . crypto . Cipher Ċ Ċ /** Ċ Ġ* Ġ åŃĹç¬¦ä¸² æł¼å¼ı çļĦ å¯Ĩ éĴ¥ åľ¨ æľª åľ¨ çī¹æ®Ĭ è¯´æĺİ æĥħåĨµä¸ĭ éĥ½ ä¸º BASE 6 4 ç¼ĸçłģ æł¼å¼ı < br ></ br > Ċ Ġ* Ġ çĶ±äºİ éĿŀ å¯¹ ç§° åĬłå¯Ĩ éĢŁåº¦ æŀģ åħ¶ ç¼ĵ æħ¢ ï¼Į ä¸ĢèĪ¬ æĸĩä»¶ ä¸į ä½¿çĶ¨ å®ĥ æĿ¥ åĬłå¯Ĩ èĢĮ æĺ¯ ä½¿çĶ¨ å¯¹ ç§° åĬłå¯Ĩ ï¼Į < br ></ br > Ċ Ġ* Ġ éĿŀ å¯¹ ç§° åĬłå¯Ĩ ç®Ĺæ³ķ åı¯ä»¥ çĶ¨æĿ¥ å¯¹ å¯¹ ç§° åĬłå¯Ĩ çļĦ å¯Ĩ éĴ¥ åĬłå¯Ĩ ï¼Į è¿Ļæł· ä¿Ŀè¯ģ å¯Ĩ éĴ¥ çļĦ å®īåħ¨ ä¹Ł å°± ä¿Ŀè¯ģ äºĨ æķ°æį®çļĦ å®īåħ¨ Ċ Ġ*/ Ċ object ĠRSA Utils Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĿŀ å¯¹ ç§° åĬłå¯Ĩ å¯Ĩ éĴ¥ ç®Ĺæ³ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconst Ġval ĠRSA Ġ= Ġ" RSA " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłå¯Ĩ å¡« åħħ æĸ¹å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconst Ġval ĠE CB _ PKCS 1 _ P ADDING Ġ= Ġ" RSA / E CB / PKCS 1 Padding " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç§ ĺ éĴ¥ é»ĺè®¤ éķ¿åº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ KEY _ SIZE Ġ= Ġ 1 0 2 4 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵ è¦ģ åĬłå¯Ĩ çļĦåĨħå®¹ è¶ħè¿ĩ buffer Size ï¼Į åĪĻ éĩĩçĶ¨ part Split è¿Ľè¡Į åĪĨ åĿĹ åĬłå¯Ĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠDEFAULT _ SPLIT Ġ= Ġ"# PART # ". toByteArray () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵåīį ç§ ĺ éĴ¥ æĶ¯æĮģ åĬłå¯Ĩ çļĦ æľĢå¤§ åŃĹèĬĤ æķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ BUFFER SIZE Ġ= ĠDEFAULT _ KEY _ SIZE Ġ/ Ġ 8 Ġ- Ġ 1 1 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éļıæľº çĶŁæĪĲ RSA å¯Ĩ éĴ¥ å¯¹ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Length Ġ å¯Ĩ éĴ¥ éķ¿åº¦ ï¼Į èĮĥåĽ´ ï¼ļ 5 1 2 ï½ŀ 2 0 4 8 ĊĠĠĠĠ Ġ* Ġ ä¸ĢèĪ¬ 1 0 2 4 ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgenerate RSA KeyPair ( key Length : ĠInt ): ĠKey Pair ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk pg Ġ= ĠKey Pair Generator . getInstance ( RSA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk pg . initialize ( key Length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk pg . gen KeyPair () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ åħ¬ éĴ¥ åĬłå¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠĠĠĠĠ Ġæ º Ĳ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param ĠpublicKey Ġ åħ¬ éĴ¥ ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġencrypt By PublicKey ( data : ĠString , ĠpublicKey : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . encode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt By PublicKey ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . toByteArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( publicKey , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). replace ("\ n ", Ġ""). replace ("\\ ", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠçĶ¨ åħ¬ éĴ¥ å¯¹ åŃĹç¬¦ä¸² è¿Ľè¡Į åĬłå¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġ åİŁ æĸĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġencrypt By PublicKey ( data : ĠByteArray ?, ĠpublicKey : ĠByteArray ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ å¾ĹåĪ° åħ¬ éĴ¥ ĊĠĠĠĠĠĠĠ Ġval Ġkey Spec Ġ= ĠX 5 0 9 Encoded KeySpec ( publicKey ) ĊĠĠĠĠĠĠĠ Ġval Ġk f Ġ= ĠKey Factory . getInstance ( RSA ) ĊĠĠĠĠĠĠĠ Ġval Ġkey Public Ġ= Ġk f . generate Public ( key Spec ) ĊĠĠĠĠĠĠĠ Ġ// Ġ åĬłå¯Ĩ æķ°æį® ĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĠCipher . getInstance ( E CB _ PKCS 1 _ P ADDING ) ĊĠĠĠĠĠĠĠ Ġcp . init ( Cipher . ENCRYPT _ MODE , Ġkey Public ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcp . do Final ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ç§ģ éĴ¥ åĬłå¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠĠĠĠĠ Ġæ º Ĳ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param ĠpublicKey Ġ åħ¬ éĴ¥ ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġencrypt By PrivateKey ( data : ĠString , ĠpublicKey : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . encode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt By PrivateKey ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . toByteArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( publicKey , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). replace ("\ n ", Ġ""). replace ("\\ ", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç§ģ éĴ¥ åĬłå¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠĠĠĠĠĠ Ġ å¾ħ åĬłå¯Ĩ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param ĠprivateKey Ġ å¯Ĩ éĴ¥ ĊĠĠĠĠ Ġ* Ġ@ return Ġbyte [] Ġ åĬłå¯Ĩ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġencrypt By PrivateKey ( data : ĠByteArray ?, ĠprivateKey : ĠByteArray ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ å¾ĹåĪ° ç§ģ éĴ¥ ĊĠĠĠĠĠĠĠ Ġval Ġkey Spec Ġ= ĠPKCS 8 Encoded KeySpec ( privateKey ) ĊĠĠĠĠĠĠĠ Ġval Ġk f Ġ= ĠKey Factory . getInstance ( RSA ) ĊĠĠĠĠĠĠĠ Ġval Ġkey Private Ġ= Ġk f . generate Private ( key Spec ) ĊĠĠĠĠĠĠĠ Ġ// Ġæķ°æį® åĬłå¯Ĩ ĊĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance ( E CB _ PKCS 1 _ P ADDING ) ĊĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . ENCRYPT _ MODE , Ġkey Private ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcipher . do Final ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ åħ¬ éĴ¥ è§£ å¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġencrypted Data Ġ å·² åĬłå¯Ĩ æķ°æį® ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ param ĠpublicKey ĠĠĠĠ Ġ åħ¬ éĴ¥ ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġdecrypt By PublicKey ( encrypted Data : ĠString ?, ĠpublicKey : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypt By PublicKey ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( encrypted Data , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( publicKey , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ¬ éĴ¥ è§£ å¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠĠĠĠĠ Ġ å¾ħ è§£ å¯Ĩ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param ĠpublicKey Ġ å¯Ĩ éĴ¥ ĊĠĠĠĠ Ġ* Ġ@ return Ġbyte [] Ġ è§£ å¯Ĩ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġdecrypt By PublicKey ( data : ĠByteArray ?, ĠpublicKey : ĠByteArray ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ å¾ĹåĪ° åħ¬ éĴ¥ ĊĠĠĠĠĠĠĠ Ġval Ġkey Spec Ġ= ĠX 5 0 9 Encoded KeySpec ( publicKey ) ĊĠĠĠĠĠĠĠ Ġval Ġk f Ġ= ĠKey Factory . getInstance ( RSA ) ĊĠĠĠĠĠĠĠ Ġval Ġkey Public Ġ= Ġk f . generate Public ( key Spec ) ĊĠĠĠĠĠĠĠ Ġ// Ġæķ°æį® è§£ å¯Ĩ ĊĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance ( E CB _ PKCS 1 _ P ADDING ) ĊĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . DE CRYPT _ MODE , Ġkey Public ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcipher . do Final ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > ĊĠĠĠĠ Ġ* Ġ ç§ģ éĴ¥ è§£ å¯Ĩ ĊĠĠĠ Ġ</ P > Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġencrypted Data Ġ å·² åĬłå¯Ĩ æķ°æį® ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ param ĠprivateKey ĠĠĠ Ġ ç§ģ éĴ¥ ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġdecrypt By PrivateKey ( encrypted Data : ĠString ?, ĠprivateKey : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypt By PrivateKey ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( encrypted Data , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( privateKey , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä½¿çĶ¨ ç§ģ éĴ¥ è¿Ľè¡Į è§£ å¯Ĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġdecrypt By PrivateKey ( ĊĠĠĠĠĠĠĠ Ġencrypted : ĠByteArray ?, ĊĠĠĠĠĠĠĠ ĠprivateKey : ĠByteArray ? ĊĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ å¾ĹåĪ° ç§ģ éĴ¥ ĊĠĠĠĠĠĠĠ Ġval Ġkey Spec Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPKCS 8 Encoded KeySpec ( privateKey ) ĊĠĠĠĠĠĠĠ Ġval Ġk f Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Factory . getInstance ( RSA ) ĊĠĠĠĠĠĠĠ Ġval Ġkey Private Ġ= Ġk f . generate Private ( key Spec ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ è§£ å¯Ĩ æķ°æį® ĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCipher . getInstance ( E CB _ PKCS 1 _ P ADDING ) ĊĠĠĠĠĠĠĠ Ġcp . init ( Cipher . DE CRYPT _ MODE , Ġkey Private ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcp . do Final ( encrypted ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠçĶ¨ åħ¬ éĴ¥ å¯¹ åŃĹç¬¦ä¸² è¿Ľè¡Į åĪĨ æ®µ åĬłå¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠĠĠĠĠ Ġæ º Ĳ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param ĠpublicKey Ġ åħ¬ éĴ¥ ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġencrypt By PublicKey For Sp ilt ( data : ĠString , ĠpublicKey : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . encode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt By PublicKey For Sp ilt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . toByteArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( publicKey , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). replace ("\ n ", Ġ""). replace ("\\ ", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠçĶ¨ åħ¬ éĴ¥ å¯¹ åŃĹç¬¦ä¸² è¿Ľè¡Į åĪĨ æ®µ åĬłå¯Ĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġencrypt By PublicKey For Sp ilt ( data : ĠByteArray , ĠpublicKey : ĠByteArray ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Len Ġ= Ġdata . size ĊĠĠĠĠĠĠĠ Ġif Ġ( data Len Ġ<= ĠDEFAULT _ BUFFER SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġencrypt By PublicKey ( data , ĠpublicKey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġall Bytes : ĠMutable List < Byte > Ġ= ĠArrayList ( 2 0 4 8 ) ĊĠĠĠĠĠĠĠ Ġvar Ġbuf Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsub Data Loop Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġbuf : ĠByteArray ? Ġ= ĠByteArray ( DEFAULT _ BUFFER SIZE ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdata Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf ! ![ buf Index ] Ġ= Ġdata [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ buf Index Ġ== ĠDEFAULT _ BUFFER SIZE Ġ|| Ġi Ġ== Ġdata Len Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Data Loop ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sub Data Loop Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin ĠDEFAULT _ SPLIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Bytes . add ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypt Bytes Ġ= Ġencrypt By PublicKey ( buf , ĠpublicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġencrypt Bytes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Bytes . add ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf Ġ= Ġif Ġ( i Ġ== Ġdata Len Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠByteArray ( Math . min ( DEFAULT _ BUFFER SIZE , Ġdata Len Ġ- Ġi Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( all Bytes . size ) ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġall Bytes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes [ i ++] Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbytes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ç§ģ éĴ¥ åĪĨ æ®µ åĬłå¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠĠĠĠĠ Ġæ º Ĳ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param ĠpublicKey Ġ åħ¬ éĴ¥ ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġencrypt By PrivateKey For Sp ilt ( data : ĠString , ĠpublicKey : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . encode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt By PrivateKey For Sp ilt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . toByteArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( publicKey , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). replace ("\ n ", Ġ""). replace ("\\ ", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĨ æ®µ åĬłå¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠĠĠĠĠĠ Ġ è¦ģ åĬłå¯Ĩ çļĦ åİŁå§ĭ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param ĠprivateKey Ġ ç§ ĺ éĴ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġencrypt By PrivateKey For Sp ilt ( data : ĠByteArray , ĠprivateKey : ĠByteArray ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Len Ġ= Ġdata . size ĊĠĠĠĠĠĠĠ Ġif Ġ( data Len Ġ<= ĠDEFAULT _ BUFFER SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġencrypt By PrivateKey ( data , ĠprivateKey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġall Bytes : ĠMutable List < Byte > Ġ= ĠArrayList ( 2 0 4 8 ) ĊĠĠĠĠĠĠĠ Ġvar Ġbuf Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsub Data Loop Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġbuf : ĠByteArray ? Ġ= ĠByteArray ( DEFAULT _ BUFFER SIZE ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdata Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf ! ![ buf Index ] Ġ= Ġdata [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ buf Index Ġ== ĠDEFAULT _ BUFFER SIZE Ġ|| Ġi Ġ== Ġdata Len Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Data Loop ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sub Data Loop Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin ĠDEFAULT _ SPLIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Bytes . add ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypt Bytes Ġ= Ġencrypt By PrivateKey ( buf , ĠprivateKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġencrypt Bytes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Bytes . add ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf Ġ= Ġif Ġ( i Ġ== Ġdata Len Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠByteArray ( Math . min ( DEFAULT _ BUFFER SIZE , Ġdata Len Ġ- Ġi Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( all Bytes . size ) ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġall Bytes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes [ i ++] Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbytes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ¬ éĴ¥ åĪĨ æ®µ è§£ å¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġencrypted Data Ġ å·² åĬłå¯Ĩ æķ°æį® ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ param ĠpublicKey ĠĠĠĠ Ġ åħ¬ éĴ¥ ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġdecrypt By PublicKey For Sp ilt ( encrypted Data : ĠString ?, ĠpublicKey : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypt By PublicKey For Sp ilt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( encrypted Data , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( publicKey , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ¬ éĴ¥ åĪĨ æ®µ è§£ å¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġencrypted Ġ å¾ħ è§£ å¯Ĩ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param ĠpublicKey Ġ å¯Ĩ éĴ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġdecrypt By PublicKey For Sp ilt ( encrypted : ĠByteArray , ĠpublicKey : ĠByteArray ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsplit Len Ġ= ĠDEFAULT _ SPLIT . size ĊĠĠĠĠĠĠĠ Ġif Ġ( split Len Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdecrypt By PublicKey ( encrypted , ĠpublicKey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdata Len Ġ= Ġencrypted . size ĊĠĠĠĠĠĠĠ Ġval Ġall Bytes : ĠMutable List < Byte > Ġ= ĠArrayList ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġvar Ġlatest StartIndex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġdata Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbt Ġ= Ġencrypted [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Match Split Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġdata Len Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĪ° data çļĦ æľĢåĲİ äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpart Ġ= ĠByteArray ( data Len Ġ- Ġlatest StartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( encrypted , Ġlatest StartIndex , Ġpart , Ġ 0 , Ġpart . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypt Part Ġ= Ġdecrypt By PublicKey ( part , ĠpublicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġdecrypt Part ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Bytes . add ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest StartIndex Ġ= Ġi Ġ+ Ġsplit Len ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġlatest StartIndex Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( bt Ġ== ĠDEFAULT _ SPLIT [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿Ļä¸ª æĺ¯ ä»¥ split [ 0 ] å¼Ģ å¤´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( split Len Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ+ Ġsplit Len Ġ< Ġdata Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ ² ¡ æľī è¶ħ åĩº data çļĦ èĮĥåĽ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 1 Ġuntil Ġsplit Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEFAULT _ SPLIT [ j ] Ġ!= Ġencrypted [ i Ġ+ Ġj ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j Ġ== Ġsplit Len Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éªĮè¯ģ åĪ° split çļĦ æľĢåĲİ ä¸Ģ ä½į ï¼Į éĥ½ æ²¡æľī break ï¼Į åĪĻ è¡¨ æĺİ å·²ç»ı ç¡®è®¤ æĺ¯ split æ®µ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Match Split Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsplit åıªæľī ä¸Ģ ä½į ï¼Į åĪĻ å·²ç»ı åĮ¹éħį äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Match Split Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Match Split ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpart Ġ= ĠByteArray ( i Ġ- Ġlatest StartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( encrypted , Ġlatest StartIndex , Ġpart , Ġ 0 , Ġpart . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypt Part Ġ= Ġdecrypt By PublicKey ( part , ĠpublicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġdecrypt Part ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Bytes . add ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest StartIndex Ġ= Ġi Ġ+ Ġsplit Len ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġlatest StartIndex Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( all Bytes . size ) ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġall Bytes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes [ i ++] Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbytes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä½¿çĶ¨ ç§ģ éĴ¥ åĪĨ æ®µ è§£ å¯Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġencrypted Data Ġ å·² åĬłå¯Ĩ æķ°æį® ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ param ĠprivateKey ĠĠĠ Ġ ç§ģ éĴ¥ ( BASE 6 4 ç¼ĸçłģ ) ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġdecrypt By PrivateKey For Sp ilt ( encrypted Data : ĠString ?, ĠprivateKey : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypt By PrivateKey For Sp ilt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( encrypted Data , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . decode ( privateKey , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä½¿çĶ¨ ç§ģ éĴ¥ åĪĨ æ®µ è§£ å¯Ĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġdecrypt By PrivateKey For Sp ilt ( encrypted : ĠByteArray , ĠprivateKey : ĠByteArray ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsplit Len Ġ= ĠDEFAULT _ SPLIT . size ĊĠĠĠĠĠĠĠ Ġif Ġ( split Len Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdecrypt By PrivateKey ( encrypted , ĠprivateKey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdata Len Ġ= Ġencrypted . size ĊĠĠĠĠĠĠĠ Ġval Ġall Bytes : ĠMutable List < Byte > Ġ= ĠArrayList ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġvar Ġlatest StartIndex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġdata Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbt Ġ= Ġencrypted [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Match Split Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġdata Len Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĪ° data çļĦ æľĢåĲİ äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpart Ġ= ĠByteArray ( data Len Ġ- Ġlatest StartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( encrypted , Ġlatest StartIndex , Ġpart , Ġ 0 , Ġpart . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypt Part Ġ= Ġdecrypt By PrivateKey ( part , ĠprivateKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġdecrypt Part ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Bytes . add ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest StartIndex Ġ= Ġi Ġ+ Ġsplit Len ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġlatest StartIndex Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( bt Ġ== ĠDEFAULT _ SPLIT [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿Ļä¸ª æĺ¯ ä»¥ split [ 0 ] å¼Ģ å¤´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( split Len Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ+ Ġsplit Len Ġ< Ġdata Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ ² ¡ æľī è¶ħ åĩº data çļĦ èĮĥåĽ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 1 Ġuntil Ġsplit Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEFAULT _ SPLIT [ j ] Ġ!= Ġencrypted [ i Ġ+ Ġj ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j Ġ== Ġsplit Len Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éªĮè¯ģ åĪ° split çļĦ æľĢåĲİ ä¸Ģ ä½į ï¼Į éĥ½ æ²¡æľī break ï¼Į åĪĻ è¡¨ æĺİ å·²ç»ı ç¡®è®¤ æĺ¯ split æ®µ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Match Split Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsplit åıªæľī ä¸Ģ ä½į ï¼Į åĪĻ å·²ç»ı åĮ¹éħį äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Match Split Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Match Split ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpart Ġ= ĠByteArray ( i Ġ- Ġlatest StartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( encrypted , Ġlatest StartIndex , Ġpart , Ġ 0 , Ġpart . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypt Part Ġ= Ġdecrypt By PrivateKey ( part , ĠprivateKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġdecrypt Part ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Bytes . add ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest StartIndex Ġ= Ġi Ġ+ Ġsplit Len ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġlatest StartIndex Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( all Bytes . size ) ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġall Bytes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes [ i ++] Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbytes ĊĠĠĠ Ġ} Ċ }