私はサードパーティプラットフォームを使用してランディングページを作成していますが、これは特定のプラットフォームを使用するビジネス要件です。.NETとJava間の対称暗号化
自分のページでは、自分のサイトでリソースを呼び出すときに、データを暗号化してリクエストパラメータを通じてサーバーに送信できます。これは、AES対称暗号化によって行われます。
パスワード、salt(16進値でなければならない)、および初期化ベクトル(ただし16文字)を指定する必要があります。
バックエンドは.NETプラットフォームです。それは期待するよりも、私は長いIVを指定した場合、根本的な例外はあるので、私はこれを知っている:
はSystem.Security.Cryptography.CryptographicException: Specified initialization vector (IV) does not match the block size for this algorithm. Source: mscorlib
したがって、たとえば、彼らの終わりに私は指定:
EncryptSymmetric("Hello World","AES","P4ssw0rD","00010203040506070809", "000102030405060708090A0B0C0D0E0F")
の入力がある場合:プレーンテキスト、アルゴリズム、パスフレーズ、ソルト、およびIV。
私は値を取得する:私がしようとするとJCEかはBouncyCastleプロバイダを使用して、私の側でこれを復号化する場合eg/t9NIMnxmh412jTGCCeQ==
は、私は(同じアルゴ、千回の反復とフレーズ、塩& IVを、パス)を取得:2rrRdHwpKGRenw8HKG1dsA==
完全に異なっている。
私はAESを解読する方法についてオンラインで多くのJavaサンプルを見てきました。 http://blogs.msdn.com/b/dotnetinterop/archive/2005/01/24/java-and-net-aes-crypto-interop.aspx
Javaプラットフォーム上で.NETフレームワークによって生成されたパスフレーズ、塩、IVを使用するAES対称暗号化を復号化するにはどうすればよいですか?
私は、Java側で同じシグネチャを生成して比較することができれば、必ずしも暗号化文字列の内容を復号化する必要はありません(実際に生成されたものがハッシュであることが判明した場合)。
私はJDK 1.5を本番環境で使用していますので、これを行うには1.5を使用する必要があります。
Javaの多くの例では、Java側では繰り返し回数を指定する必要がありますが、.NET側では繰り返し回数を指定する必要があります。デフォルトの.NET出力と一致するJava側で指定する必要がある反復の標準回数はありますか?
プログラミング言語にかかわらず同じ値に解読する必要があるので、Javaの代わりにC#で解読しようとしましたか?別の言語で解読コードを構築することは、実装上の違いを見つけるのに役立つかもしれません。 –
私はC#のプログラマーではないので、どこから始めるべきかはわかりません。私はこの他のプラットフォームとやりとりしようとしています。 – Dominic
AESをサポートする暗号APIを持っている限り、他のどの言語を使ってもこれを試すことができます。もう1つの考えは、ソースマシンとターゲットマシン上のプレーンテキストのエンコーディングが異なることでしょうか?例えば。 UTF-8とUTF-16。 –