2013-03-01 6 views
10

Devo decodificare un dato codificato Base64 ricevuto da un server php.codifica/decodifica dei dati tra php/java per android

Il server utilizza 'base64_encode' per codificare i dati.

Nella mia app Android, utilizzo la classe android.utils.Base64 per eseguire la decodifica.

dati originali cifrati = "† + U] M (‡ = NO" dati

codifica Base64 in php dà ...... - "hisP3F1NBCgIAocQCD3x9g =="
dati di codifica Base64 in Android dà - "4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y ="

Come si può vedere, la stringa java codificata è più lungo del php codificato. si prega di dare i vostri preziosi suggerimenti. ho bisogno di scoprire i loro formati di codifica di default.

Come ottenere il stessa stringa codificata da entrambi.?

java/code Android:

String encrypted = "†+Ü]M(‡=ñö"; 
byte[] encoded = Base64.encode(encrypted.getBytes(), Base64.DEFAULT); 
String str = new String(encoded); //str = "4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y=" 
+1

encrypted.getBytes() dipende dalla codifica locale. molto probabilmente utf-8 nel tuo caso. in PHP, dipenderà dal server, probabilmente una codifica a 8 bit di dimensione fissa. i byte che dai al codificatore base64 sono diversi. – njzk2

+0

@ userSeven7s: l'output da PHP è basato su CP1252, l'uscita da JAVA è basata su UTF-8, aggiornerò la mia risposta sotto – Shehabix

risposta

11

Prova questa in Java: Questo vi darà la versione lunga della stringa (UTF-8)

byte[] encoded = Base64.encode(encrypted.getBytes("UTF-8"), Base64.DEFAULT); 
String str = new String(encoded, "UTF-8"); 

Aggiornato:

Prova questo in Java: Questo ti darà la versione corta della stringa (CP1252)

// This should give the same results as in PHP 
byte[] encoded = Base64.encode(encrypted.getBytes("CP1252"), Base64.DEFAULT); 
String str = new String(encoded, "CP1252"); 

In alternativa provare questo script PHP:

file di

: test.php

<?php 

echo base64_encode($_GET['str'])." Default UTF-8 version<br />"; 
echo base64_encode(iconv("UTF-8","CP1252",$_GET['str']))." CP1252 Version <br />"; 

?> 

usage: http://[SOMEDOMAIN]/test.php?str=†+Ü]M(‡=ñö 
+1

Grazie amico .. Questo è stato un grande aiuto .. Apprezzalo. "CP1252" ha fatto il trucco. Ero una ricerca su Google lontano dalla risposta. – Ronnie

+0

come posso decodificare questo '// Questo dovrebbe dare gli stessi risultati di PHP byte [] encoded = Base64.encode (encrypted.getBytes (" CP1252 "), Base64.DEFAULT); String str = new String (encoded, "CP1252"); ' – Anirban