2013-03-01 8 views
10

Ich muss eine Base64 codierte Daten von einem PHP-Server empfangen dekodieren.Codierung/Decodierung von Daten zwischen PHP/Java für Android

Der Server verwendet 'base64_encode', um die Daten zu codieren.

In meiner Android-App verwende ich android.utils.Base64-Klasse, um die Decodierung zu tun.

ursprüngliche verschlüsselte Daten = "† + U] M (‡ = Nein"

Base64-Kodierung von Daten in PHP gibt ...... - "hisP3F1NBCgIAocQCD3x9g =="
Base64-Kodierung von Daten in Android gibt - „4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y =“

Wie Sie sehen können, die Java-codierte Zeichenfolge ist länger als die pHP codiert. Bitte geben Sie Ihre wertvollen Anregungen. ich brauche die Standardcodierungsformate erfahren.

Wie bekommen die gleiche codierte Zeichenfolge von beiden.?

java/android-Code:

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

encrypted.getBytes() ist abhängig von der locale-Codierung. höchstwahrscheinlich utf-8 in Ihrem Fall. In PHP wird es vom Server abhängen, wahrscheinlich eine 8-Bit-Codierung mit fester Größe. Die Bytes, die Sie Ihrem Base64-Encoder geben, sind unterschiedlich. – njzk2

+0

@ userSeven7s: die Ausgabe von der PHP basiert auf CP1252, die Ausgabe von JAVA basiert auf UTF-8, ich werde meine Antwort unter – Shehabix

Antwort

11

die Sie interessieren in Java: Dies gibt Ihnen die lange Version des Strings (UTF-8)

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

Aktualisiert:

Versuchen Sie dies in Java: Dadurch erhalten Sie die Kurzversion der Zeichenfolge (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"); 

Alternativ dieses PHP-Skript versuchen:

Datei: 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

aktualisieren Danke, dass .. Das war eine große Hilfe .. Schätzen Sie es. "CP1252" hat es geschafft. Ich war eine Google-Suche weg von der Antwort. – Ronnie

+0

Wie kann ich das dekodieren? // Dies sollte die gleichen Ergebnisse wie in PHP byte [] encoded = Base64.encode (verschlüsselte.getBytes ("CP1252"), Base64.DEFAULT); String str = new String (codiert, "CP1252"); ' – Anirban

Verwandte Themen