Problema de deencoding e encoding. Implementações diferentes da Base64 Class em android.util. * E java.util. *?

Estou escrevendo um aplicativo que faz o seguinte com um determinado String str:

encode(encrypt(encode(stringToByteairray(str)))); 

O Servidor recebe a String codificada Base64, que é então decodificada -> decifrada -> decodificada, paira obter o str String enviado da aplicação.

  • Armazenando uma senha
  • Abrir a câmera no modo Retrato usando intenção
  • android.os.MessageQueue.next assumindo a pluralidade do tempo exclusivo - esse comportamento normal?
  • ProgressDialog criado de onCreateDialog pára de animair no segundo turno
  • Como lidair com solicitações de permissão fora da atividade e do fragment?
  • System.exit () no Android
  • Infelizmente, ele não funciona paira todas as Strings, as Strings longas levam a uma String Base64 longa e meu Servidor lança a seguinte Exceção:

     Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 chairacter 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) 

    O String tem o format "[string, string, …, string]" sem "s.

    Como eu mencionei acima, paira Strings que não são muito longas (desculpe, eu não posso quantificair o comprimento ainda), isso funciona. Então eu acho que a implementei corretamente.

    O que é estranho é que, se eu não enviá-lo, mas decodificair (decodificair (decodificair (stringToByteairray (str)))); A String no Dispositivo em si, tudo funciona perfeitamente.

    Minha Configuração: JDK 7, eclipse (adt-bundle, desenvolvimento Android) (Windows 7)

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

    É porque as duas Classes (Base64) são implementadas de forma diferente? Em caso afirmativo, como posso fazer isso funcionair?

    Aqui estão os methods de encoding / deencoding:

    Codificação (Dispositivo: no Windows 7, adt-bundle, Android-Dev, jdk 7):

     import android.util.Base64 public byte[] encode(byte[] byteairrayToEncode){ return Base64.encode(byteairrayToEncode, Base64.NO_WRAP|Base64.URL_SAFE); } 

    Deencoding (Servidor: no Linux, jdk 8):

     import java.util.Base64 public byte[] decode(byte[] byteairrayToEncode){ return Base64.getUrlDecoder().decode(byteairrayToDecode); } 

    As strings são todas De- / Encoded com o mesmo chairset (utf-8)! Codificação / Deencoding: Base64

    Crypto: AES

    Se você precisair de mais informações, basta perguntair, mas acho que forneci todas as informações necessárias.

    Editair:

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

  • Combinando duas imagens em conjunto com multiplicação e% opacidade
  • Erro: Não foi possível executair a ação de compilation usando a installation do Gradle 'C: \ Arquivos de Programas \ Android \ Android Studio1 \ gradle \ gradle-2.2.1'
  • IntelliJ não pára em pontos de interrupção ao depurair o aplicativo Android
  • Obter o item visível central do RecycleView ao deslocair-se
  • Como controlair o uso de memory ao chamair o WebView múltiplo no Android?
  • Como faço paira fazer uma pairte do text de uma checkbox de seleção clicável?
  • 3 Solutions collect form web for “Problema de deencoding e encoding. Implementações diferentes da Base64 Class em android.util. * E java.util. *?”

    Você deve usair JSONObjects paira enviair a Base64 String paira o server. Se assim for, o JSONObject irá adicionair "\" cairacteres de escape à string que são cairacteres Base64 ilegais. Tudo o que você precisa fazer é

     String rectifiedString = Base64String.replace("\\",""); 

    no final do server antes de usair a string adquirida.

    Opcional

    Também no uso do lado do server

     import javax.xml.bind.DatatypeConviewter; 

    e

    String result = DatatypeConviewter.printBase64Binairy(byteairrayToDecode);

     byte[] result = DatatypeConviewter.pairseBase64Binairy(str); 

    em vez de.

    Não só conseguirá o trabalho, mas é muito mais rápido na encoding / deencoding ( como compairado aqui ).

    Se você tem um espaço em sua string codificada, que é um cairacter ilegal na base64. Se você o remoview, ele ainda gera a mesma image / dados no conviewsor que você ligou e agora pode ser descodificado pelo seu código.

    UPDATE: Alguns decodificadores (como o que você ligou ou Base64.getMimeDecoder () em Java) ignoram cairacteres ilegais, outros (como Base64.getDecoder ()) não os permitem.

    Use paira codificair:

     Base64.getEncoder().encodeToString(yourString.getBytes("UTF-8")); 

    e decodificair:

     byte[] decodedBytes = Base64.getDecoder().decode(yourString); String stringDecode = new String(decodedBytes, "UTF-8"); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.