0

PHPスクリプトを介して暗号化されたパスワードを渡す必要があるプロジェクトに取り組んでいます。パスワード テキストは aes で暗号化されます。PHPスクリプトが入力文字列を正しく「読み取った」かどうかを確認するために、入力文字列をエコーアウトします。残念ながら、暗号化されたテキストは、URL から入力されたものとは異なりました。

元のテスト:

Salted__1Y´NSÍMößlf QÑ≈ˆ9%ÃíB5I

コマンドを使用してMacで暗号化:

openssl enc -aes-256-cbc -salt -in input.txt -out encryptedtext.txt

パスワードで暗号化:test

復号化するコマンド: openssl enc -d -aes-256-cbc -in encryptedtext.txt

復号化されたコンテンツ:hi

スクリプトを実行した後、次のようになりました。

Salted__1Yâ´NSãMãŸlfl Qã'â‰Ë†9%ãƒãB5I

私はphpとこれに慣れていないので、phpが入力文字列に対して何をするのか正確にはわかりません。私が知る限り、エンコーディングを何かに変更しているようです。これがなぜ起こっているのか、またそれを防ぐ方法を知っている人がいたら教えてください。

4

1 に答える 1

1

とにかく、そこにあるのはバイナリの意味不明です。テキストではありません。解決されるテキストは、選択したエンコーディングでたまたまどの文字を表しているかの偶然にすぎません。

...

はい、それは、意味不明なバイナリを解釈するために使用されるエンコーディングが異なるという事実に違いがあることを意味します。CLI のオリジナルは UTF-8 として解釈される可能性がありますが、ブラウザー (?) の PHP 出力は Latin-1 として解釈されます。または他の組み合わせ。

ブラウザに出力する場合は、コンテンツを解釈する文字セットを次のように設定します。

header('Content-Type: text/html; charset=utf-8');

あなたが持っているのは、そもそも特定の文字セットのテキストではないので、あまり意味がありません。

背景情報については、テキストを操作するためのエンコーディングと文字セットについて、すべてのプログラマーが絶対に、積極的に知る必要があることを参照してください。

于 2012-11-13T05:30:25.323 に答える