Я написал тестовую программу для чтения сертификата пользователя из хранилища сертификатов и шифрования некоторого текста.Однако я понимаю, что используемый алгоритм шифрования - 3DES.Мне нужно изменить это на AES-256.Я читал аналогичный пост здесь, но для меня, я думаю, что моя ситуация немного отличается ... Итак, я сразу перейду к делу.
Используя предложенный метод:
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 для шифрования.Например:
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, и почтовый клиент, которому я отправляю это сообщение, не может распознать этот алгоритм.
Принимая во внимание, что при использовании метода почтового ящика для шифрования:
Я застрял с 3DES, хотя алгоритм шифрования ключей правильный...
Итак, я полагаю, что в конце дня я спрашиваю: есть ли способ получить как алгоритм шифрования ключей как rsaEncryption, так и блочный шифр как AES-256?
В справочнике по API я видел метод UpdateSecureMimeCapabilities, сможет ли это выполнить эту работу?
Кроме того, я предполагаю, что более фундаментальный вопрос состоит в том, почему алгоритм шифрования ключей изменится, если обаметоды по сути используют один и тот же сертификат?
Спасибо!
Обновление: поэтому я создал собственный класс для переопределения функции GetPreferredEncryptionAlgorithm, однако он все еще возвращается к 3DES.
public class CustomWindowsSecureMimeContext : WindowsSecureMimeContext
{
public CustomWindowsSecureMimeContext () : base ()
{
}
protected override EncryptionAlgorithm GetPreferredEncryptionAlgorithm(CmsRecipientCollection recipients)
{
return EncryptionAlgorithm.Aes256;
}
}
Правильно ли я это переопределил?