Le décodage et l'Encodage de problème. Différentes implémentations de Base64 de la Classe android.util.* et java.util.*?

Je suis en train d'écrire une Application qui effectue les opérations suivantes avec un String str:

encode(encrypt(encode(stringToBytearray(str))));

Le Serveur reçoit la Chaîne encodée en Base64, qui est ensuite décodé -> décrypté -> décodé, pour obtenir l'envoyé String str à partir de l'App.

Malheureusement il ne marche pas pour toutes les Chaînes, de Chaînes longues mener à une longue Chaîne Base64 et mon Serveur jette l'Exception suivante:

Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character 5b
 at java.util.Base64$Decoder.decode0(Base64.java:714)
 at java.util.Base64$Decoder.decode(Base64.java:526)
 at Main.decode(Main.java:113)
 at Main.main(ain.java:33)

La Chaîne a le format "[string, string, ..., string]" sans "s.

Comme je l'ai mentionné ci-dessus, pour les Chaînes qui ne sont pas trop long (désolé je ne peux pas quantifier la longueur encore), cela fonctionne. Donc, je pense que j'ai mis en œuvre ce droit.

Ce qui est bizarre, c'est que si je n'ai pas l'envoyer, mais decode(déchiffrer(decode(stringToBytearray(str)))); la Chaîne sur l'Appareil lui-même, tout fonctionne parfaitement.

Ma Configuration:
JDK 7, eclipse (adt-bundle, développement android) (Windows 7)

JDK 8, eclipse ("normal" java) (Linux (xubuntu))

Est-ce parce que les deux Classes (Base64) sont mis en œuvre diffrently? Si oui, comment puis-je le faire fonctionner?

Voici le Codage/Décodage des Méthodes:

Encodage (Appareil: sur Windows 7, adt-bundle, Android-Dev, jdk 7):

import android.util.Base64

public byte[] encode(byte[] bytearrayToEncode){
   return Base64.encode(bytearrayToEncode, Base64.NO_WRAP|Base64.URL_SAFE);
}

De décodage (Serveur: sur Linux, jdk 8):

import java.util.Base64

public byte[] decode(byte[] bytearrayToEncode){
   return Base64.getUrlDecoder().decode(bytearrayToDecode);
}

Les chaînes sont toutes De-/Encodé avec le même jeu de caractères (utf-8)!
Encodage/Décodage: Base64

De chiffrement: AES

Si vous avez besoin de plus d'Informations, il suffit de demander, mais je pense que j'ai fourni toutes les informations nécessaires.

Edit:

public String bytearrayToString(byte[] bytearray){
    String str = null;
    try {
        str = new String(bytearray, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        //TODO Auto-generated catch block
        e.printStackTrace();
    }
    return str;
}

public byte[] stringToBytearray(String str){
    byte[] bytearray = null;
    try {
        bytearray = str.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
        //TODO Auto-generated catch block
        e.printStackTrace();
    }
    return bytearray;
}
0x5b est [, et comme je l'ai dit à la Chaîne de format est [string, ..., chaîne]. Mais pourquoi tous le codage/décodage des travaux sur l'Appareil, mais pas sur le Serveur, lorsque la Chaîne est trop longue. (j'ai comparé les deux longues chaînes, et ils sont égaux)
Est votre serveur de règlage de la requête param lorsque la longueur est trop grande? Juste essayer de reprendre le reçu de base-64 message et vérifier si elles sont exactement égaux. Parce que tronquée de la chaîne peut ne plus être valable en Base 64 message chiffré.
Je viens de découvrir, que le deuxième appel de coder, ne s'applique pas (même si j'ai pensé que j'ai vérifié). Jusqu'à présent, merci pour toutes les suggestions! Je vais essayer de comprendre pourquoi ça ne marche pas.
J'ai un peu de mal avec les différents codeurs en langage java.util.Base64. Avez-vous essayé en Base64.getDecoder() au lieu de Base64.getUrlDecoder()?

OriginalL'auteur user3469811 | 2014-03-27