#android #xamarin #bouncycastle #smime #mimekit
#Android #xamarin #bouncycastle #smime #mimekit
Вопрос:
Я пытаюсь расшифровать файл .P7M для Android в Xamarin Android, используя bouncycastle и mimekit. Когда я нажимаю «ApplicationPkcs7Mime p7m = новое ApplicationPkcs7Mime (SecureMimeType.EnvelopedData, ms)»;
Эмулятор Android не знает, как вызвать его из хранилища сертификатов Android или устройства чтения карт USB.
public class CustomBouncyCastleSecureMimeContext : BouncyCastleSecureMimeContext
{
public CustomBouncyCastleSecureMimeContext() : base()
{
}}
Обновленный код
System.Diagnostics.Debug.WriteLine("Inside DecryptMime");
CryptographyContext.Register(typeof(BouncyCastleSecureMimeContext));
// Payload from the add-in contains the mime content of the email on base-64 encoding
byte[] bytes = ResourceLoader.GetEmbeddedResourceBytes(Assembly.GetAssembly(typeof(ResourceLoader)), "smime.p7m");
MemoryStream ms = new MemoryStream(bytes);
ApplicationPkcs7Mime p7m = new ApplicationPkcs7Mime(SecureMimeType.EnvelopedData, ms);
// parse data as cms enveloped
CmsEnvelopedDataParser edParser = new CmsEnvelopedDataParser(bytes);
// reiterate inside to find recipient info
ICollection collections = edParser.GetRecipientInfos().GetRecipients();
IEnumerator it = collections.GetEnumerator();
while (it.MoveNext())
{
RecipientInformation info = (RecipientInformation)it.Current;
}
Есть ли у кого-нибудь опыт чтения файла P7M в Android?
Большое спасибо
Комментарии:
1. попробуйте добавить
CryptographyContext.Register
передApplicationPkcs7Mime p7m = new ApplicationPkcs7Mime(SecureMimeType.EnvelopedData, ms);
2. Я добавил CryptographyContext.Register(typeof(BouncyCastleSecureMimeContext)); и расширил класс, но, похоже, dosent работает
3. BouncyCastleSecureMimeContext является абстрактным, поэтому регистрация этого класса завершится ошибкой. Вам необходимо зарегистрировать свой пользовательский подкласс.
4.
p7m = new ApplicationPkcs7Mime(SecureMimeType.EnvelopedData, ms)
не зависит от того, регистрируете ли вы какой-либо контекст S / MIME, поэтому я не уверен, почему вы в любом случае получаете исключение в этой строке, поскольку оно вообще не выполняет никакой криптографии. Все, что он делает, это создает объект MIME для переноса уже зашифрованного потока данных.