この質問は以前にも何度も聞かれたことは知っていますが、私の状況は特殊だと思います。すでに多くの人が IRC から私を助けようとしてきましたが、まだ解決策がありません。基本的に、PHPスクリプトで.NET CSプログラムhttp://codepad.org/4SmP1Oekの暗号化機能と一致させようとしています。これまでのところ、 http://codepad.viper-7.com/JsYFPKを思いつきました。
パディングを追加しない(デフォルトのままにする)など、さまざまなパディングオプションを試しましたが、C#出力と一致しない異なる値を取得するたびに。
例えば、
csharp: gLbzWiVmpmDrmzfZgRaM9w==
php: vid7cv20FZ68tbkNLHv3RQ==
php with no padding added: Z+ELd8MNs2frjTBUiWYj5w==
csharp クラスでわかるように、暗号化の値はデフォルトのままであり、32 バイトのキー、16 バイトの iv、および 16 バイトの入力を持つ CBC であると確信しています。
更新: C# プログラムを再作成し、同じ出力を正常に取得したので、キーを php の複数の異なる文字列に変更し、cs を 16 および 32 バイトに変更しようとしましたが、運が悪く、同じ問題が発生しました。コードは上でリンクしたものと同じで、テキストは最初に変更せずに Encrypt 関数に送信されるため、パディングの問題であると疑い始めています。
更新#2:私は問題を理解しました.csharpプログラムが9バイトのキーを使用しているため、ISであることが判明しました. cs と php の両方で 16 バイトまでは問題なく動作します。