Я пытаюсь зашифровать данные с помощью пароля и сохранить их в сообщении CMS, закодированном в ASN.1 (с использованием C # и BouncyCastle 1.4)
Код, который у меня есть, кажется, имеет две проблемы:
данные, кажется, не подписаны с помощью HMAC, поэтому, когда я вмешиваюсь в encodedData (включив закомментированную строку), дешифрование все еще успешно.
когда я расшифровываю данные, которые я подделал, я получаю поврежденный простой текст. Однако повреждены только два блока данных открытого текста . Это говорит о том, что шифрование фактически не использует режим CBC.
( edit : игнорировать вторую точку, именно так и должен работать CBC )
Вот что я тестирую:
public void TestMethod1()
{
byte[] data = new byte[1024]; // plaintext: a list of zeroes
CmsEnvelopedDataGenerator generator = new CmsEnvelopedDataGenerator();
CmsPbeKey encryptionKey = new Pkcs5Scheme2PbeKey("foo", new byte[] { 1, 2, 3 }, 2048);
generator.AddPasswordRecipient(encryptionKey, CmsEnvelopedDataGenerator.Aes256Cbc);
CmsProcessableByteArray cmsByteArray = new CmsProcessableByteArray(data);
CmsEnvelopedData envelopeData = generator.Generate(cmsByteArray, CmsEnvelopedDataGenerator.Aes256Cbc);
byte[] encodedData = envelopeData.GetEncoded();
// encodedData[500] = 10; // tamper with the data
RecipientID recipientID = new RecipientID();
CmsEnvelopedData decodedEnvelopeData = new CmsEnvelopedData(encodedData);
RecipientInformation recipient = decodedEnvelopeData.GetRecipientInfos().GetFirstRecipient(recipientID);
byte[] data2 = recipient.GetContent(encryptionKey);
CollectionAssert.AreEqual(data, data2);
}
Что я делаю не так? Как правильно написать это?