Статус: Новичок
Группы: Участники
Зарегистрирован: 10.10.2011(UTC) Сообщений: 6 Откуда: Kazan
|
Здравствуйте всем. Понимаю что вопрос из разряда легких, но никак не могу разобраться в нем. Вобщем с помощью шарпея подписываю и шифрую текстовый файл. Далее отправляю его клиенту. Тот пытается открыть его в КРиптоАРме. Но это не удается. Ошибка - Отстутсвие личного сертификата. Хотя тот сертификат с помощью которого я шифрую у них есть. Тогда мне предложили решение - нужно вложить сертификат получателя. Еще один факт. КОгда один и тот же файл шифрую и подписываю свой программой, пробую просто открыть его в Крипто АРме - там смотрю список сертификатов - указан только тот которым я шифрую это понятно. А когда тот же файл подписываю и шифрую с помощью самого крипто арма - то сертификатов намного больше. Как мне программно добавить туда нужные сертификаты? прилагаю кусок кода который шифрует. И не до конца пойму как можно в это сообщение вложить еще какие то сертификаты. Код:
{
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection = store.Certificates.Find(X509FindType.FindBySubjectName, signerName, true);
X509Certificate2 cert = collection[0];
filename = Sign(filename, cert);
Encrypt(filename, cert);
}
private static string Sign(string filename, X509Certificate2 cert)
{
byte[] data = ReadFile(filename);
ContentInfo contentInfo = new ContentInfo(data);
SignedCms signedCms = new SignedCms(contentInfo);
CmsSigner cmsSigner = new CmsSigner(cert);
signedCms.ComputeSignature(cmsSigner, false);
byte[] signed = signedCms.Encode();
Console.WriteLine("Signed bytes size: {0}", signed.Length);
string signedStr = Convert.ToBase64String(signed);
string signedFilename = filename + ".sig";
File.WriteAllBytes(signedFilename, Encoding.UTF8.GetBytes(signedStr));
return signedFilename;
}
private static void Encrypt(string filename, X509Certificate2 cert)
{
byte[] data = ReadFile(filename);
ContentInfo content = new ContentInfo(data);
EnvelopedCms envelopedCms = new EnvelopedCms(content);
CmsRecipient recip1 = new CmsRecipient(
SubjectIdentifierType.IssuerAndSerialNumber, cert);
envelopedCms.Encrypt(recip1);
byte[] envelopedbytes = envelopedCms.Encode();
string envelopedBytesStr = Convert.ToBase64String(envelopedbytes);
string encryptedFilename = filename + ".enc";
File.WriteAllBytes(encryptedFilename, Encoding.UTF8.GetBytes(envelopedBytesStr));
}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close