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