2017-10-03 2 views
3

Comme ma question, j'ai un gros problème quand je code/décode Base64 entre Java et Android.Erreur d'encodage/décodage Base64 entre Java et Android

Voici mon cas:

J'écrire du code pour crypter/décrypter en utilisant ECC sur Java, le travail de mycode très bien.

Puis j'essaye de crypter la chaîne sur Java et décrypter cette chaîne cryptée sur Android, il échoue.

Je pense que le problème peut-être coder/décoder Base64.

Voici mon code:

1/Chiffrer/déchiffrer sur Java uniquement:

//ENCRYPT 
try { 
     Cipher c = Cipher.getInstance("ECIES",BouncyCastleProvider.PROVIDER_NAME); 
     c.init(Cipher.ENCRYPT_MODE,publicKey); 
     encodeBytes = c.doFinal(origin.getBytes()); 

     String encrypt = Base64.getEncoder().encodeToString(encodeBytes); 

     System.out.println("Encrypt:"+ encrypt+"\n"); 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

//////DECRYPT 
    try 
    { 
     String abc = Base64.getDecoder().decode(encrypt); 
     Cipher c = Cipher.getInstance("ECIES","BC"); 
     c.init(Cipher.DECRYPT_MODE,privateKey); 
     //decodeBytes = c.doFinal(encodeBytes); 
     decodeBytes = c.doFinal(abc); 
     String deCrypt = new String(decodeBytes,"UTF-8"); 

     System.out.println("Decrypt:"+ deCrypt +"\n"); 
    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 

Voici mon résultat:

private key: EC Private Key [eb:bc:b0:30:f0:42:4e:f1:0f:c5:6a:49:22:93:51:72:ea:23:0c:9a] 
     X: c55275cd4a40690ec8d5333cd31994e3066d7f49f57df6c3aed20385c6b50325 
     Y: b1a2c67c9c3ac8b8508e210cb2ac476999a913b85e283359fd4482d68164c7e9 


public key: EC Public Key [eb:bc:b0:30:f0:42:4e:f1:0f:c5:6a:49:22:93:51:72:ea:23:0c:9a] 
     X: c55275cd4a40690ec8d5333cd31994e3066d7f49f57df6c3aed20385c6b50325 
     Y: b1a2c67c9c3ac8b8508e210cb2ac476999a913b85e283359fd4482d68164c7e9 


Encrypt:BG+pFzDgRLhTI44Rj9w3zkTprPqTryOrqP8xfrS7tb5H3e0KGoxyq/e5SngwQeAr91aGBn6jAUNupwqEihYta7epTtpLP84d7LFxgTJs+bsYgu3WskadiLSImjigzLM1g/VgZ2PWk1Y7idAX 

Decrypt:63B952562----0907888511 

J'écrire du code pour décrypter la chaîne sur Android , mais Android ne pas avoir cette méthode:

Base64.getDecoder().decode(String); 

Je dois le remplacer par ceci:

byte[] encodeBytes = null; 
encodeBytes = Base64.encode(my_encrypted_string.getBytes(),Base64.DEFAULT); 
Cipher c = Cipher.getInstance("ECIES","SC"); 
c.init(Cipher.DECRYPT_MODE,privateKeyFromFile); 
decodeBytes = c.doFinal(encodeBytes); 
String deCrypt = new String(decodeBytes,"UTF-8"); 
txtHiden.setText(deCrypt); 
Toast.makeText(activity, deCrypt, Toast.LENGTH_SHORT).show(); 

Mais il montre cette erreur:

10-03 09:50:24.466 13134-13134/com.example.napoleon.luanvana W/System.err: org.spongycastle.jcajce.provider.util.BadBlockException: unable to process block 

Je suis vraiment coincé. Aidez-moi, s'il vous plaît. Merci d'avance.

+0

Il est trop difficile de reproduire votre problème. Y at-il un code qui peut être compilé facilement dans Java et Android? –

Répondre

1

Cela semble être une simple erreur. Vous avez remplacé

String abc = Base64.getDecoder().decode(encrypt); 

avec

byte[] encodeBytes = null; 
encodeBytes = Base64.encode(my_encrypted_string.getBytes(),Base64.DEFAULT); 

si je lis bien. Essayez de remplacer cela par decode à la place. Comme le texte chiffré est codé Base64 deux fois au lieu d'être décodé avant de tenter de le décrypter, le décryptage échoue avec l'erreur que vous nous avez montrée.

+0

Je teste ta réponse mais ça ne marche pas, même erreur. – nistelrooy41001662