【发布时间】:2010-11-17 10:30:56
【问题描述】:
我正在尝试使用密码加密数据并将其存储在 ASN.1 编码的 CMS 消息中(使用 C# 和 BouncyCastle 1.4)
我的代码似乎有两个问题:
数据似乎没有使用 HMAC 签名,所以当我篡改编码数据时(通过启用注释掉的行),解密仍然成功。
-
当我解密我篡改的数据时,我得到了损坏的纯文本。然而只有两块纯文本数据被破坏了。这似乎表明加密实际上并未使用 CBC 模式。
(编辑:忽略第二点,this is exactly how CBC is supposed to work)
这是我正在测试的:
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);
}
我做错了什么?写这个的正确方法是什么?
【问题讨论】:
标签: c# encryption cryptography bouncycastle