Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sirchaplin  
#1 Оставлено : 14 октября 2011 г. 17:43:10(UTC)
sirchaplin

Статус: Новичок

Группы: Участники
Зарегистрирован: 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));
		}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.