AesCryptoServiceProvider を使用してコンテンツを復号化しているときに、次のエラーが発生します。使用する必要があるモードは CipherMode.CFB で、PaddingMode は PKCS7 です。同じキー、IV、PaddingMode、Cipher Mode を使用して、iOS で同じコンテンツを復号化できます。
次の方法で CryptoStream を使用しようとしましたが、コンテンツを復号化できませんでした。
public byte[] DecryptWithAES(byte[] content, byte[] key, byte[] iv, int mode, int paddingMode)
{
byte[] plainBytes = null;
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.BlockSize = 128;
aes.KeySize = 256;
aes.IV = iv;
aes.Key = key;
aes.Padding = (PaddingMode)paddingMode;
aes.Mode = (CipherMode)mode;
ICryptoTransform crypto = aes.CreateDecryptor(aes.Key, aes.IV);
using (var input = new MemoryStream(content))
{
using (var output = new MemoryStream())
{
using (var cryptStream = new CryptoStream(input, crypto, CryptoStreamMode.Read))
{
var buffer = new byte[1024];
var read = cryptStream.Read(buffer, 0, buffer.Length);
while (read > 0)
{
output.Write(buffer, 0, read);
read = cryptStream.Read(buffer, 0, buffer.Length);
}
}
plainBytes = output.ToArray();
}
}
return plainBytes;
}
}
また、次の方法でコンテンツを復号化しようとしましたが、機能しませんでした。
public byte[] DecryptWithAES(byte[] content, byte[] key, byte[] iv, int mode, int paddingMode)
{
byte[] plainBytes = null;
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.BlockSize = 128;
aes.KeySize = 256;
aes.IV = iv;
aes.Key = key;
aes.Padding = (PaddingMode)paddingMode;
aes.Mode = (CipherMode)mode;
ICryptoTransform crypto = aes.CreateDecryptor(aes.Key, aes.IV);
plainBytes = crypto.TransformFinalBlock(content, 0, content.Length);
}
return plainBytes;
}
どちらの場合も、パディング モードは PKCS7 であり、CipherMode は CFB です。
長さ 22 の暗号化されたコンテンツでこれを試しました。キーの長さ: 32、IV の長さ: 16。
昨日からこの問題で立ち往生しています。私を助けてください。