首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要将加密算法更改为AES-256

需要将加密算法更改为AES-256
EN

Stack Overflow用户
提问于 2018-12-26 22:39:30
回答 1查看 285关注 0票数 2

我编写了一个测试程序来读取证书存储中的用户证书,并对一些文本进行加密。然而,我意识到使用的加密算法是3DES。我需要将其更改为AES-256。我在这里读到了一个类似的帖子,但对我来说,我认为我的情况有点different...So,我会直奔主题。

使用建议的方法:

代码语言:javascript
运行
复制
var recipient = new CmsRecipient("MyCert.cer");
        recipient.EncryptionAlgorithms = new EncryptionAlgorithm[] {
            EncryptionAlgorithm.Aes256
        };           
        var CmsCollection = new CmsRecipientCollection();
        CmsCollection.Add(recipient);
// Followed by calling ApplicationPkcs7Mime.Encrypt(CmsCollection, p7m);

我可以改变加密算法。然而,我的密钥加密算法,如果我使用我的原始方法,简单地使用MailboxAddress进行加密,就不同了。例如:

代码语言:javascript
运行
复制
MimeMessage mm = new MimeMessage();
        mm.From.Add(new MailboxAddress(from));
        mm.To.Add(new MailboxAddress(to));
ApplicationPkcs7Mime.Encrypt(mm.To.Mailboxes, p7m);

使用CmsRecipientCollection方法,这是我的pkcs7m文件的结果:

您可以看到,密钥加密算法已更改为rsaOAEP,并且我向其发送此消息的电子邮件客户端无法识别此算法。

而使用Mailbox方法进行加密:

我坚持使用3DES,而密钥加密算法是正确的.

所以我想,最后,我想问的是,有没有办法让密钥加密算法和分组密码都是rsaEncryption -256?

我在API参考中看到了一个方法UpdateSecureMimeCapabilities,这能做这个工作吗?

另外,我想一个更基本的问题是,如果两种方法本质上使用相同的证书,为什么密钥加密算法会改变?

谢谢!

更新:所以我创建了一个自定义类来覆盖GetPreferredEncryptionAlgorithm函数,但是它仍然回退到3DES。

代码语言:javascript
运行
复制
public class CustomWindowsSecureMimeContext : WindowsSecureMimeContext
    {
        public CustomWindowsSecureMimeContext () : base ()
        {

        }
        protected override EncryptionAlgorithm GetPreferredEncryptionAlgorithm(CmsRecipientCollection recipients)
        {
            return EncryptionAlgorithm.Aes256;
        }
    }

我是否正确地覆盖了它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-27 08:00:30

在您的情况下,UpdateSecureMimeCapabilities方法不会有帮助。它不在封装数据时使用,它只在解码签名消息时使用(这是一种更新数据库的方法,用于更新您的通信者使用的电子邮件客户端的S/MIME功能)。

没有办法在MimeKit中指定密钥加密算法,因为我不知道如何在BouncyCastle (由任何BouncyCastleSecureMimeContext子类使用)或Microsoft的CMS API (由WindowsSecureMimeContext使用)中指定它。这似乎是它自己做出的决定。

无论您使用哪个SecureMimeContext类,您都可以覆盖GetPreferredEncryptionAlgorithm()方法以提供您自己的算法,以选择适合用于加密发送给所有指定收件人的邮件的加密算法-或者,您可以覆盖GetCmsRecipient()方法,该方法接受一个MailboxAddress并为该收件人创建一个新的CmsRecipient

另一种选择是使用MimeKit.Cryptography.CmsRecipientCollection应用程序接口来设置CmsRecipient.EncryptionAlgorithms属性,该属性表示该收件人的电子邮件客户端所支持的加密算法。如果您为每个收件人设置了一个包含Aes256的EncryptionAlgorithms数组,则将选择该算法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53933480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档