1

ユーザーの名前を暗号化された形式に変換してからphpで復号化する必要があるアプリケーションがあります。暗号化コードはうまく機能します。しかし、php側では、復号化された文字列には常に読み取り不可能な形式の2〜3個の追加文字が含まれています。これらの追加文字がどこから取得されているのかわかりません。パディングと関係がありますか?私はアンドロイドコードとPHPコードを投稿しています。

Androidのサイドコード

public String encryptStringWithAES(String Message) throws Exception {

    String key = "123456789abcdefg";

    String iv = "1234567890123456";

    String padding = "ZeroBytePadding";


    SecretKeySpec spec = new SecretKeySpec(key.getBytes("UTF8"), "AES");

    Cipher cipher = Cipher.getInstance("AES/CBC/" + padding);



    IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());


    cipher.init(Cipher.ENCRYPT_MODE, spec, ivspec);

    byte[] array = cipher.doFinal(Message.getBytes());

    System.out.println("encrypted ARRAY LENGHT:" + array.length);

    String encoded_string = android.util.Base64.encodeToString(array, 0,
    array.length, Base64.NO_PADDING);

    System.out.println("Requested encoded string: " + encoded_string);
    return encoded_string;

}

PHPサイドコード:

$key_for_AES='123456789abcdefg';

$iv='1234567890123456';



$message=$_POST['msg'];

$decoded_string=base64_decode($message);

$decrypted_string=mcrypt_decrypt('rijndael-128',$key_for_AES, $decoded_string,'cbc',$iv);
4

2 に答える 2

0

最近、C# と PHP で同様のプログラミング経験がありました。

復号化されたオブジェクトにヌル文字が含まれている可能性があります。それらを剥がしてみることができます。また、文字列の末尾からキャリッジ リターンを取り除きます。

$decrypted_string = str_replace("\0", "", $Decrypted);
$decrypted_string = str_replace("\r", "", $Decrypted);
$decrypted_string = str_replace("\n", "", $Decrypted);
于 2013-02-27T09:36:29.363 に答える
0

おそらく文字エンコードの問題があると思います。Android コードでは、文字列のエンコードにUTF-8を使用します。そのため、android から php へのデータ フロー全体がこのエンコーディングを使用していることを確認してください。

私の具体的なアドバイスは、php スクリプト ファイルのエンコーディングを確認することです。また、UTF-8 エンコーディングに BOM があるかどうかを判断する必要があります。

編集:

「エンコーディング」というと「文字エンコーディング」を思い浮かべます。文字エンコーディングを担当する Android のコードは、おそらく次のとおりです。

key.getBytes("UTF8")

どのエディタを使用しているかわかりませんが、使用している php スクリプト ファイルに設定されている文字エンコーディングを確認する必要があります。UTF-8であることを確認してください。andorid が何を使用しているのかわからないため、BOM を使用する場合と使用しない場合の両方をテストします。

于 2013-02-27T09:33:24.037 に答える