2013-03-01 63 views
10

Tôi phải giải mã dữ liệu được mã hóa base64 nhận được từ máy chủ php.mã hóa/giải mã dữ liệu giữa php/java cho android

Máy chủ sử dụng 'base64_encode' để mã hóa dữ liệu.

Trong ứng dụng Android của tôi, tôi sử dụng lớp android.utils.Base64 để thực hiện giải mã.

gốc dữ liệu được mã hóa = "† + U] M (‡ = no" dữ liệu

Base64 mã hóa trong php cho ...... - "hisP3F1NBCgIAocQCD3x9g =="
dữ liệu mã hóa Base64 trong android cho - "4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y ="

Như bạn thấy, chuỗi java mã hóa dài hơn php mã hóa. Xin vui lòng cho ý kiến ​​đóng góp của bạn. tôi cần phải tìm ra các định dạng mã hóa mặc định của họ.

Làm thế nào để có được cùng một chuỗi được mã hóa từ cả hai.?

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() phụ thuộc vào bảng mã miền địa phương. rất có thể là utf-8 trong trường hợp của bạn. trong php, nó sẽ phụ thuộc vào máy chủ, có khả năng mã hóa 8 bit kích thước cố định. các byte bạn cung cấp cho bộ mã hóa base64 khác nhau. – njzk2

+0

@ userSeven7s: đầu ra từ PHP dựa trên CP1252, đầu ra từ JAVA dựa trên UTF-8, tôi sẽ cập nhật câu trả lời của tôi bên dưới – Shehabix

Trả lời

11

Hãy thử điều này trong Java: Điều này sẽ cung cấp cho bạn phiên bản dài của chuỗi (UTF-8)

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

Cập nhật:

Hãy thử điều này trong Java: Điều này sẽ cung cấp cho bạn phiên bản ngắn của chuỗi (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"); 

Ngoài ra thử PHP Script này:

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

Cảm ơn dude .. Đó là một trợ giúp lớn .. Đánh giá cao nó. "CP1252" đã làm các trick. Tôi là một tìm kiếm google đi từ câu trả lời. – Ronnie

+0

làm thế nào tôi có thể giải mã này '// Điều này sẽ cho kết quả tương tự như trong PHP byte [] được mã hóa = Base64.encode (encrypted.getBytes (" CP1252 "), Base64.DEFAULT); Chuỗi str = new String (được mã hóa, "CP1252"); ' – Anirban

Các vấn đề liên quan