0

サーバーでAES256暗号化を行い、iosで復号化します。それは長い間機能しませんでしたが、暗号化する前にテキストを base 64 エンコードして暗号化することにしました。

誤って base64_encode($source) の周りに中かっこを置き、それが機能し始めました。したがって、この間違ったコードが機能するようになりました(iosでうまく復号化されます):

$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, "base64_encode($source)", MCRYPT_MODE_CBC, $iv);

そして正しいことはまったく機能しません:

$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, base64_encode($source), MCRYPT_MODE_CBC, $iv);

それが違いを生む場合は、cake phpを使用してください。何が間違っていて、違いは何ですか? なぜブレースが機能し、ブレースがないと復号化に失敗するのですか? 非常にばかげた質問で申し訳ありませんが、私は暗号化が初めてです。

4

1 に答える 1

0

プレーン テキストを文字エンコードし (たとえば、UTF-8 を使用します。PHP には utf8-encode 関数があります)、結果を文字列として転送する場合は結果を base64 エンコードする必要があります。

mcrypt_encrypt() の出力は、ランダムなバイトと区別できないことに注意してください。つまり、有効な文字エンコーディングではないもの (00h 値のバイト、C の EOF など) を含め、任意のバイトを出力できることを意味します。IV はランダムであるため (うまくいけば)、すべてが桃色に見えることもあれば、無効な文字が原因で復号化が失敗することもあります。

暗号化では、(文字の) エンコード/デコードの原則を完全に制御できない場合 (暗号化/復号化はあまり行わない)、予期しない結果が発生することがあります。これは、何かをプログラミングするときに避ける必要があることです。

于 2012-07-01T23:50:22.460 に答える