.Net WebService から与えられたソルトとパスワードから Java (Android) で AES キーを生成する必要があります。同じパスワードとソルト (Rfc2898DeriveBytes と AesManaged() を使用) を使用して、.net で生成されたキーと同じキーが必要です。Androidでの私のコードは次のとおりです。
char[] passwordAsCharArray = password.toCharArray();
PBEKeySpec pbeKeySpec = new PBEKeySpec(passwordAsCharArray, salt, 1000, 256);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
SecretKeySpec secretKey = new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES");
.net のコードは次のとおりです。
byte[] keyBytes = Encoding.Unicode.GetBytes(key);
Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(key, keyBytes);
AesManaged rijndaelCSP = new AesManaged();
rijndaelCSP.BlockSize = 128;
rijndaelCSP.KeySize = 256;
rijndaelCSP.Key = derivedKey.GetBytes(rijndaelCSP.KeySize / 8);
rijndaelCSP.IV = derivedKey.GetBytes(rijndaelCSP.BlockSize / 8);
ICryptoTransform decryptor = rijndaelCSP.CreateDecryptor();
両方のキーを比較すると、それらは異なります。Androidで.Netと同じキーを生成する方法はありますか? (.net で生成されたキーが正しいことはわかっています)。.Net の反復回数は 1000 回で、salt とパスワードも Android と同じです。
OK、まったく同じキー (バイト配列として) は必要ないことがわかりました。.Netで暗号化されたファイル(Javaで)を復号化するためにこれが必要でした-このキーを使用するとBad Padding Exceptionが発生したため、キーが異なっていて問題が発生したと思いますが、 IV のようなキー - それは私の問題を解決しました。返信ありがとうございます。