バイト配列を ASCII などにデコードするには、元のエンコーディングを知る必要があります。それ以外の場合は、バイナリとして扱う必要があります。
注: Base64 は、ネットワーク経由でバイナリ データを転送することを目的としています。
Base64 でバイト配列をエンコードすることをお勧めします。次に、PHP コードで Base64 文字列をデコードして UTF-8 文字列に戻します。
Java では、バイト配列を Base64 でエンコードしてから UTF-8 にデコードする方法を次に示します。
import org.apache.commons.codec.binary.Base64;
public class MyTest {
public static void main(String[] args) throws Exception {
byte[] byteArray = new byte[] {100,25,28,-122,-26,94,-3,-26};
System.out.println("To UTF-8 string: " + new String(byteArray, "UTF-8"));
byte[] base64 = Base64.encodeBase64(byteArray);
System.out.println("To Base64 string: " + new String(base64, "UTF-8"));
byte[] decoded = Base64.decodeBase64(base64);
System.out.println("Back to UTF-8 string: " + new String(decoded, "UTF-8"));
/* the decoded byte array is the same as the original byte array */
for (int i = 0; i < decoded.length; i++) {
assert byteArray[i] == decoded[i];
}
}
}
上記のコードからの出力は次のとおりです。
UTF-8 文字列へ: d��^�
Base64 文字列へ: ZBkchuZe/eY=
UTF-8 文字列に戻る: d��^�</pre>
したがって、PHP コードで同じバイナリ データを使用する場合は、Base64 文字列をコピーして PHP コードに貼り付け、UTF-8 にデコードします。このようなもの:
<?php
$str = 'ZBkchuZe/eY=';
$key = base64_decode($str);
echo $key;
?>
私は PHP でコーディングしていませんが、次の方法を使用して Base64 をデコードできるはずです:
http://php.net/manual/en/function.base64-decode.php
上記のコードは、元のバイナリ データを UTF-8 としてエコー バックする必要があります (ただし、変な文字が含まれています)。$key
要点は、変数内のおかしな文字列が、Java バイト配列にあったものと同じバイナリ データを表しているということです。
d��^�</pre>
$key
変数を PHP 暗号化メソッドに渡すことができるはずです。