私はRijndaelを使用して暗号化されたmp4を持っており、次の方法でC#で復号化しています。
System.Security.Cryptography.Rijndael crypt = System.Security.Cryptography.Rijndael.Create();
crypt.Key = convertedSecureString;
byte[] initializationVectorLength = new byte[sizeof(int)];
CryptoStream cryptostream = new CryptoStream(inputStream, crypt.CreateDecryptor(), CryptoStreamMode.Read);
byte[] buffer = new byte[1024];
int len;
while ((len = cryptostream.Read(buffer, 0, buffer.Length)) > 0)
{
outputStream.Write(buffer, 0, len);
buffer = new byte[1024];
}
outputStream.Flush();
cryptostream.Close();
inputStream.Close();
次に、このコードをJava/Androidに相当するものに変換する必要があります。率直に言ってどこから始めればいいのかわからない。私は非常に多くのオプションに混乱しています-BouncyCastleを使用すると言う人もいれば、Apache Commonsと言う人もいれば、ネイティブJavalibを言う人もいます。これを行うにはどうすればよいですか。そして、CryptoStreamなどについてどうすればよいですか?
アップデート
キーを割り当てるためにC#で次のコードを使用しています
byte[] convertedSecureString = new byte[this.key.Length];
IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(this.key);
for (int i = 0, j = 0; i < this.key.Length * UnicodeByteLength; i = i + UnicodeByteLength, j++)
{
convertedSecureString[j] = System.Runtime.InteropServices.Marshal.ReadByte(ptr, i);
}
try
{
crypt.Key = convertedSecureString;
}
キーが安全な場所。私はJavaで同等の安全でないキーを持っています。このコードをJavaに変換するにはどうすればよいですか
アップデート
Rfc2898DeriveBytes newKey = new Rfc2898DeriveBytes(crypt.Key.ToString(), crypt.IV);
Array.Copy(newKey.GetBytes((int)crypt.KeySize / 8), crypt.Key, (int)crypt.KeySize / 8);
Array.Copy(newKey.GetBytes((int)crypt.BlockSize / 8), crypt.IV, (int)crypt.BlockSize / 8);
私はこれをC#で使用して、Rfc 2898を使用してキーを変更し、バイトを派生させています-Javaで同等のものを見つけることができません-2番目のコメントでC#のRfc2898DerivedBytesに相当するJavaを見つけました-しかし、イテレーターとdklenにどのような値を与えますか?