13

PHP サーバーから受信した base64 でエンコードされたデータをデコードする必要があります。

サーバーは「base64_encode」を使用してデータをエンコードします。

私の Android アプリでは、android.utils.Base64 クラスを使用してデコードを行います。

元の暗号化データ = "†+Ü]M(‡=ñö"
PHP の Base64 エンコーディング データは - "hisP3F1NBCgIAocQCD3x9g=="
Android の Base64 エンコーディング データは - "4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y=" を与えます

ご覧のとおり、Java でエンコードされた文字列は、PHP でエンコードされた文字列よりも長くなっています。デフォルトのエンコード形式を見つける必要があります。

両方から同じエンコードされた文字列を取得するには?

Java/Android コード:

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

2 に答える 2

14

Java でこれを試してください: これにより、長いバージョンの文字列 (UTF-8) が得られます。

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

更新しました:

Java でこれを試してください: これにより、短いバージョンの文字列が得られます (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");

または、次の PHP スクリプトを試してください。

ファイル: 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(‡=ñö
于 2013-03-01T11:46:45.277 に答える
1

私にとってCP1252は、英数字以外の記号で失敗したため、機能しませんでした。私が見つけた最良の文字セットは ISO-8859-1 で、次のように使用します。

Base64.getEncoder()
                .encodeToString(
                    stringToBeEncoded.getBytes(
                        Charset.forName("ISO-8859-1")))
于 2018-06-29T14:56:00.357 に答える