我一直在使用.NET进行加密.到目前为止,我将3DES(Oid 1.2.840.113549.3.7)与rsaEncryption(Oid 1.2.840.113549.1.1.1,RSAES-PKCS1-v1_5)结合使用.虽然第一个现在已被AES取代(Oid 2.16.840.1.101.3.4.1.42),但我仍然必须使用rsaEncryption/RSAES-PKCS1-v1_5,而不是RSAES-OAEP.
如果我只是将另一个参数传递给我正在调用的EnvelopedCMS构造函数,我可以从3DES切换到AES:
ContentInfo plainContent = new ContentInfo(new Oid("1.2.840.113549.1.7.1"), data);
EnvelopedCms encryptedMessage = new EnvelopedCms(plainContent); // using 3DES
// EnvelopedCms encryptedMessage = new EnvelopedCms(plainContent, new AlgorithmIdentifier(new Oid("2.16.840.1.101.3.4.1.42"))); // for AES (id-aes256-CBC)
CmsRecipient recipient = new CmsRecipient(cert);
encryptedMessage.Encrypt(recipient);
byte[] encryptedBytes = encryptedMessage.Encode();
Run Code Online (Sandbox Code Playgroud)
到目前为止这很好.不幸的是,有些收件人无法解密我的邮件,尽管他们能够解密AES.查看ASN.1结构告诉我,不仅3DES改为AES,而且rsaEncryption(1.2.840.113549.1.1.1)被RSAES-OAEP(1.2.840.113549.1.1.7)取代.我可以以某种方式强制仍然使用EnvelopedCMS的RSAES-PKCS1-v1_5吗?或者您是否在切换3DES-> AES时遇到了另一个问题?
编辑:如果我不能轻易地将填充更改为v1.5,我还有其他选择吗?手动调用CryptoServiceProviders并自行构建PKCS#7信封?还有更优雅的方式吗?