サードパーティのプラットフォームを使用してランディングページを作成しています。この特定のプラットフォームを使用することはビジネス要件です。
彼らのページでは、データを暗号化して、サイトのリソースを呼び出すときにリクエストパラメーターを介してサーバーに送信できます。これは、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です。
私は値を取得します:eg/t9NIMnxmh412jTGCCeQ==
JCEまたはBouncyCastleプロバイダーを使用してこれを復号化しようとすると(同じアルゴリズム、パスフレーズ、salt&IV、1000回の反復):2rrRdHwpKGRenw8HKG1dsA==
これは完全に異なります。
AESを復号化する方法について、オンラインでさまざまなJavaの例を見てきました。そのようなデモの1つは次のとおりです。http://blogs.msdn.com/b/dotnetinterop/archive/2005/01/24/java-and-net-aes-crypto-interop.aspx
Javaプラットフォーム上の.NETFrameworkによって生成されたパスフレーズ、salt、およびIVを使用するAES対称暗号化を復号化するにはどうすればよいですか?
Java側で同じ署名を生成して比較できる場合は、暗号化文字列の内容を復号化できる必要はありません(ここで実際に生成されているのはハッシュであることが判明した場合)。
私は本番環境でJDK1.5を使用しているので、これを行うには1.5を使用する必要があります。
ちなみに、Javaの例の多くは、Java側で繰り返し回数を指定する必要がありますが、.NET側では指定する必要はありません。デフォルトの.NET出力と一致するJava側で指定する必要のある標準の反復回数はありますか。