Atom Лента - Форум КриптоПро - Тема:Шифрование/Дешифрование файла по аналогии с cryptcp - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:Shifrovanie/Deshifrovaniefajjlapoanalogiiscryptcp-10:1Copyright 2024 Форум КриптоПро2024-03-29T03:33:43Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.rulnkhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=29913&name=lnklnkhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=29913&name=lnkАндрей *https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=15008&name=Андрей *lnkhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=29913&name=lnkМаксим Коллегинhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=3&name=Максим Коллегинlnkhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=29913&name=lnkYetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid38653:1Шифрование/Дешифрование файла по аналогии с cryptcp<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />Автор: lnk <br /><br />В SDK имеются следюущие функции<br /><br /> static byte[] EncryptMsg(<br /> Byte[] msg,<br /> X509Certificate2Collection recipientCerts) <br /><br />В первой передается только recipientCerts,<br /></div></div><br /><br />А что еще нужно-то?<br />X509Certificate2Collection заполнили сертификатами (отправитель\получатель)?<br /></div></div><br /><br />Как минимум порядок сертификатов в котором их добавлять в коллекцию, при использовании cryptcp один сертификат используется для операции -encr, второй -sign. Я так понимаю in.cer используется для подписи, а out.cer для шифрованния файла.<br />В MultipleRecipients операции sign подписи не видно ( возможно этого там и нет ).<br /><br /><br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />В последней вообще сертификаты никак не передаются, т.е. при Decrypt они разве не нужны ?<br />Или они как-то не явно передаются ?<br /></div></div><br /><br />Формат PKCS#7<br />Содержится информация о сертификатах (УЦ\Серийный номер сертификата пользователя), "на которые было зашифровано", для поиска их в хранилище при расшифровке (чтобы получить ссылку на закрытый ключ и расшифровать).<br /><br /></div></div><br /><br /><br />Ок. А в cryptcp для чего передается сертификат , или он игнорируется ?<br />Также я так понимаю файл data.p7s - это файл с подписью, а после операции verify он сохраняется в файл data.txt который уже без подписи.<br />В MulitpleRecipients я не уверен что подпись также "удаляется" при проверке ( если эта проверка там есть )<br /><br /><br /><br /><br /><br /></td></tr></table>2013-05-18T11:12:26+03:002013-05-18T11:12:26+03:00lnk<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />Автор: lnk <br /><br />В SDK имеются следюущие функции<br /><br /> static byte[] EncryptMsg(<br /> Byte[] msg,<br /> X509Certificate2Collection recipientCerts) <br /><br />В первой передается только recipientCerts,<br /></div></div><br /><br />А что еще нужно-то?<br />X509Certificate2Collection заполнили сертификатами (отправитель\получатель)?<br /></div></div><br /><br />Как минимум порядок сертификатов в котором их добавлять в коллекцию, при использовании cryptcp один сертификат используется для операции -encr, второй -sign. Я так понимаю in.cer используется для подписи, а out.cer для шифрованния файла.<br />В MultipleRecipients операции sign подписи не видно ( возможно этого там и нет ).<br /><br /><br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />В последней вообще сертификаты никак не передаются, т.е. при Decrypt они разве не нужны ?<br />Или они как-то не явно передаются ?<br /></div></div><br /><br />Формат PKCS#7<br />Содержится информация о сертификатах (УЦ\Серийный номер сертификата пользователя), "на которые было зашифровано", для поиска их в хранилище при расшифровке (чтобы получить ссылку на закрытый ключ и расшифровать).<br /><br /></div></div><br /><br /><br />Ок. А в cryptcp для чего передается сертификат , или он игнорируется ?<br />Также я так понимаю файл data.p7s - это файл с подписью, а после операции verify он сохраняется в файл data.txt который уже без подписи.<br />В MulitpleRecipients я не уверен что подпись также "удаляется" при проверке ( если эта проверка там есть )<br /><br /><br /><br /><br /><br /></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid38651:1Шифрование/Дешифрование файла по аналогии с cryptcp<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: lnk <a href="/forum2/default.aspx?g=posts&m=38650#post38650"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Спасибо, но не совсем очевидна аналогия.<br />Если посмотреть то в моем сообщении с cryptcp используется 2 сертификата при шифровании/дешифровании<br /></div></div><br />это и есть MultipleRecipients <br /><br />При шифровании нет понятия "мой\другой сертификат". Есть сертификаты получателей зашифрованных данных.<br /><br /><br /><div class="quote"><span class="quotetitle">Автор: lnk <a href="/forum2/default.aspx?g=posts&m=38650#post38650"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><br />В SDK имеются следюущие функции<br /><br /> static byte[] EncryptMsg(<br /> Byte[] msg,<br /> X509Certificate2Collection recipientCerts) <br /><br />В первой передается только recipientCerts,<br /></div></div><br />А что еще нужно-то?<br />X509Certificate2Collection заполнили сертификатами (отправитель\получатель)?<br /><br /> <br /><br /><div class="quote"><span class="quotetitle">Автор: lnk <a href="/forum2/default.aspx?g=posts&m=38650#post38650"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><br /> В последней вообще сертификаты никак не передаются, т.е. при Decrypt они разве не нужны ?<br />Или они как-то не явно передаются ?<br /></div></div><br />Формат PKCS#7<br />Содержится информация о сертификатах (УЦ\Серийный номер сертификата пользователя), "на которые было зашифровано", для поиска их в хранилище при расшифровке (чтобы получить ссылку на закрытый ключ и расшифровать).<br /><br /><br /><div class="quote"><span class="quotetitle">Автор: lnk <a href="/forum2/default.aspx?g=posts&m=38650#post38650"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><br />Также не понятно причем тут MultipleRecipients , в моем случае <strong>один отправитель и один получатель</strong>, то есть мне не нужно при Encrypt делать шифрование для нескольких получателей , у меня он один.<br /></div></div><br />В вашем случае = 2 получателя зашифрованных данных.<br /><br />Тогда шифруйте только на одного (на сертификат получателя), <br />но не сможете потом расшифровать с помощью сертификата отправителя (свой).<br /><br /><br /></td></tr></table>2013-05-17T23:12:01+03:002013-05-17T23:12:01+03:00Андрей *<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: lnk <a href="/forum2/default.aspx?g=posts&m=38650#post38650"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Спасибо, но не совсем очевидна аналогия.<br />Если посмотреть то в моем сообщении с cryptcp используется 2 сертификата при шифровании/дешифровании<br /></div></div><br />это и есть MultipleRecipients <br /><br />При шифровании нет понятия "мой\другой сертификат". Есть сертификаты получателей зашифрованных данных.<br /><br /><br /><div class="quote"><span class="quotetitle">Автор: lnk <a href="/forum2/default.aspx?g=posts&m=38650#post38650"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><br />В SDK имеются следюущие функции<br /><br /> static byte[] EncryptMsg(<br /> Byte[] msg,<br /> X509Certificate2Collection recipientCerts) <br /><br />В первой передается только recipientCerts,<br /></div></div><br />А что еще нужно-то?<br />X509Certificate2Collection заполнили сертификатами (отправитель\получатель)?<br /><br /> <br /><br /><div class="quote"><span class="quotetitle">Автор: lnk <a href="/forum2/default.aspx?g=posts&m=38650#post38650"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><br /> В последней вообще сертификаты никак не передаются, т.е. при Decrypt они разве не нужны ?<br />Или они как-то не явно передаются ?<br /></div></div><br />Формат PKCS#7<br />Содержится информация о сертификатах (УЦ\Серийный номер сертификата пользователя), "на которые было зашифровано", для поиска их в хранилище при расшифровке (чтобы получить ссылку на закрытый ключ и расшифровать).<br /><br /><br /><div class="quote"><span class="quotetitle">Автор: lnk <a href="/forum2/default.aspx?g=posts&m=38650#post38650"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><br />Также не понятно причем тут MultipleRecipients , в моем случае <strong>один отправитель и один получатель</strong>, то есть мне не нужно при Encrypt делать шифрование для нескольких получателей , у меня он один.<br /></div></div><br />В вашем случае = 2 получателя зашифрованных данных.<br /><br />Тогда шифруйте только на одного (на сертификат получателя), <br />но не сможете потом расшифровать с помощью сертификата отправителя (свой).<br /><br /><br /></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid38650:1Шифрование/Дешифрование файла по аналогии с cryptcp<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо, но не совсем очевидна аналогия.<br /><br />Если посмотреть то в моем сообщении с cryptcp используется 2 сертификата при шифровании/дешифровании<br /><br />В SDK имеются следюущие функции<br /><br /> static byte[] EncryptMsg(<br /> Byte[] msg,<br /> X509Certificate2Collection recipientCerts)<br /><br /> static Byte[] DecryptMsg(byte[] encodedEnvelopedCms)<br /><br />В первой передается только recipientCerts, В последней вообще сертификаты никак не передаются, т.е. при Decrypt они разве не нужны ?<br />Или они как-то не явно передаются ?<br /><br />Также не понятно причем тут MultipleRecipients , в моем случае один отправитель и один получатель, то есть мне не нужно при Encrypt делать шифрование для нескольких получателей , у меня он один.<br /><br /><br /><br /> // Зашифровываем сообщение для каждого получателя,<br /> // используя соответствующие открытые ключи получателей.<br /> // Для зашифрования используем объект класса EnvelopedCms.<br /> static byte[] EncryptMsg(<br /> Byte[] msg,<br /> X509Certificate2Collection recipientCerts)<br /> {<br /> // Помещаем сообщение в объект ContentInfo <br /> // Это требуется для создания объекта EnvelopedCms.<br /> ContentInfo contentInfo = new ContentInfo(msg);<br /><br /> // Создаем объект EnvelopedCms, передавая ему<br /> // только что созданный объект ContentInfo.<br /> // Используем идентификацию получателя (SubjectIdentifierType)<br /> // по умолчанию (IssuerAndSerialNumber).<br /> // Не устанавливаем алгоритм зашифрования тела сообщения:<br /> // ContentEncryptionAlgorithm устанавливается в <br /> // RSA_DES_EDE3_CBC, несмотря на это, при зашифровании<br /> // сообщения в адрес получателя с ГОСТ сертификатом,<br /> // будет использован алгоритм GOST 28147-89.<br /> EnvelopedCms envelopedCms = new EnvelopedCms(contentInfo);<br /><br /> // Создаем объект CmsRecipientCollection, который <br /> // идентифицирует получателей зашифрованного сообщения.<br /> CmsRecipientCollection recips =<br /> new CmsRecipientCollection(<br /> SubjectIdentifierType.IssuerAndSerialNumber,<br /> recipientCerts);<br /><br /> Console.WriteLine(<br /> "{0}Зашифровываем данные для нескольких получателей " +<br /> "с именами:", Environment.NewLine );<br /> foreach (CmsRecipient recip in recips)<br /> {<br /> Console.WriteLine("\t" +<br /> recip.Certificate.SubjectName.Name);<br /> }<br /><br /> // Зашифровываем сообщение на коллекцию получателей.<br /> envelopedCms.Encrypt(recips);<br /> Console.WriteLine("Выполнено.");<br /><br /> // Закодированное EnvelopedCms сообщение содержит<br /> // зашифрованный текст сообщения и информацию<br /> // о каждом получателе данного сообщения.<br /> return envelopedCms.Encode();<br /> }<br /><br /> // Расшифрование закодированного EnvelopedCms сообщения<br /> // для одного из получателей.<br /> static Byte[] DecryptMsg(byte[] encodedEnvelopedCms)<br /> {<br /> // Создаем объект для декодирования и расшифрования.<br /> EnvelopedCms envelopedCms = new EnvelopedCms();<br /><br /> // Декодируем сообщение.<br /> envelopedCms.Decode(encodedEnvelopedCms);<br /><br /> // Выводим количество получателей сообщения и<br /> // алгоритм зашифрования.<br /> DisplayEnvelopedCms(envelopedCms, false);<br /><br /> // Расшифровываем сообщение.<br /> // Сообщение будет расшифровано для того получателя,<br /> // чей секретный ключ будет найден первым.<br /> // Для расшифрования сообщения на конкретного <br /> // получателя можно использовать код подобный следующему:<br /> // envelopedCms.Decrypt(envelopedCms.RecipientInfos[0]);<br /> // который расшифровывает сообщение для первого <br /> // получателя.<br /> Console.Write("Расшифрование ... ");<br /> envelopedCms.Decrypt();<br /> Console.WriteLine("Выполнено.");<br /><br /> // После вызова метода Decrypt в свойстве ContentInfo <br /> // содержится расшифрованное сообщение.<br /> return envelopedCms.ContentInfo.Content;<br /> }</td></tr></table>2013-05-17T22:04:39+03:002013-05-17T22:04:39+03:00lnk<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо, но не совсем очевидна аналогия.<br /><br />Если посмотреть то в моем сообщении с cryptcp используется 2 сертификата при шифровании/дешифровании<br /><br />В SDK имеются следюущие функции<br /><br /> static byte[] EncryptMsg(<br /> Byte[] msg,<br /> X509Certificate2Collection recipientCerts)<br /><br /> static Byte[] DecryptMsg(byte[] encodedEnvelopedCms)<br /><br />В первой передается только recipientCerts, В последней вообще сертификаты никак не передаются, т.е. при Decrypt они разве не нужны ?<br />Или они как-то не явно передаются ?<br /><br />Также не понятно причем тут MultipleRecipients , в моем случае один отправитель и один получатель, то есть мне не нужно при Encrypt делать шифрование для нескольких получателей , у меня он один.<br /><br /><br /><br /> // Зашифровываем сообщение для каждого получателя,<br /> // используя соответствующие открытые ключи получателей.<br /> // Для зашифрования используем объект класса EnvelopedCms.<br /> static byte[] EncryptMsg(<br /> Byte[] msg,<br /> X509Certificate2Collection recipientCerts)<br /> {<br /> // Помещаем сообщение в объект ContentInfo <br /> // Это требуется для создания объекта EnvelopedCms.<br /> ContentInfo contentInfo = new ContentInfo(msg);<br /><br /> // Создаем объект EnvelopedCms, передавая ему<br /> // только что созданный объект ContentInfo.<br /> // Используем идентификацию получателя (SubjectIdentifierType)<br /> // по умолчанию (IssuerAndSerialNumber).<br /> // Не устанавливаем алгоритм зашифрования тела сообщения:<br /> // ContentEncryptionAlgorithm устанавливается в <br /> // RSA_DES_EDE3_CBC, несмотря на это, при зашифровании<br /> // сообщения в адрес получателя с ГОСТ сертификатом,<br /> // будет использован алгоритм GOST 28147-89.<br /> EnvelopedCms envelopedCms = new EnvelopedCms(contentInfo);<br /><br /> // Создаем объект CmsRecipientCollection, который <br /> // идентифицирует получателей зашифрованного сообщения.<br /> CmsRecipientCollection recips =<br /> new CmsRecipientCollection(<br /> SubjectIdentifierType.IssuerAndSerialNumber,<br /> recipientCerts);<br /><br /> Console.WriteLine(<br /> "{0}Зашифровываем данные для нескольких получателей " +<br /> "с именами:", Environment.NewLine );<br /> foreach (CmsRecipient recip in recips)<br /> {<br /> Console.WriteLine("\t" +<br /> recip.Certificate.SubjectName.Name);<br /> }<br /><br /> // Зашифровываем сообщение на коллекцию получателей.<br /> envelopedCms.Encrypt(recips);<br /> Console.WriteLine("Выполнено.");<br /><br /> // Закодированное EnvelopedCms сообщение содержит<br /> // зашифрованный текст сообщения и информацию<br /> // о каждом получателе данного сообщения.<br /> return envelopedCms.Encode();<br /> }<br /><br /> // Расшифрование закодированного EnvelopedCms сообщения<br /> // для одного из получателей.<br /> static Byte[] DecryptMsg(byte[] encodedEnvelopedCms)<br /> {<br /> // Создаем объект для декодирования и расшифрования.<br /> EnvelopedCms envelopedCms = new EnvelopedCms();<br /><br /> // Декодируем сообщение.<br /> envelopedCms.Decode(encodedEnvelopedCms);<br /><br /> // Выводим количество получателей сообщения и<br /> // алгоритм зашифрования.<br /> DisplayEnvelopedCms(envelopedCms, false);<br /><br /> // Расшифровываем сообщение.<br /> // Сообщение будет расшифровано для того получателя,<br /> // чей секретный ключ будет найден первым.<br /> // Для расшифрования сообщения на конкретного <br /> // получателя можно использовать код подобный следующему:<br /> // envelopedCms.Decrypt(envelopedCms.RecipientInfos[0]);<br /> // который расшифровывает сообщение для первого <br /> // получателя.<br /> Console.Write("Расшифрование ... ");<br /> envelopedCms.Decrypt();<br /> Console.WriteLine("Выполнено.");<br /><br /> // После вызова метода Decrypt в свойстве ContentInfo <br /> // содержится расшифрованное сообщение.<br /> return envelopedCms.ContentInfo.Content;<br /> }</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid38618:1Шифрование/Дешифрование файла по аналогии с cryptcp<table class="content postContainer" width="100%"><tr><td>Смотрите пример EnvelopedMultipleRecipients в SDK.</td></tr></table>2013-05-17T07:28:56+03:002013-05-17T07:28:56+03:00Максим Коллегин<table class="content postContainer" width="100%"><tr><td>Смотрите пример EnvelopedMultipleRecipients в SDK.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid38611:1Шифрование/Дешифрование файла по аналогии с cryptcp<table class="content postContainer_Alt" width="100%"><tr><td>Сейчас файл data шифруется и расшивровывается следующим образом<br /><br />Расшифровка<br />cryptcp -decr -f "e:\cps\in.cer" -nochain data.p7s.p7m data.p7s<br />cryptcp -verify -f "e:\csp\out.cer" -nochain data.p7s data.txt<br /><br />Шифрование<br />cryptcp -sign -f "e:\cps\in.cer" -nochain data.txt data.p7s<br />cryptcp -encr -f "e:\cps\out.cer" -nochain data.p7s data.p7s.p7m<br /><br />in.cer и out.cer - сертификаты с алгоритмом гост<br /><br /><br />Как аналогичное сделать на CryptoPro.NET ? <br />byte[] Decrypt( byte[] crypted )<br />byte[] Encrypt( byte[] data )<br /><br />Еще вопрос - нужно ли создавать контейнеры ключей в реестре ? При попытке решить данную задачу через Gost3410CryptoProvider требовалось имя контейнера,<br />но если посмотреть на пример с cryptcp , то имя контейнера не указано, соотвественно возможно оно излишне ?</td></tr></table>2013-05-16T20:33:54+03:002013-05-16T20:33:54+03:00lnk<table class="content postContainer_Alt" width="100%"><tr><td>Сейчас файл data шифруется и расшивровывается следующим образом<br /><br />Расшифровка<br />cryptcp -decr -f "e:\cps\in.cer" -nochain data.p7s.p7m data.p7s<br />cryptcp -verify -f "e:\csp\out.cer" -nochain data.p7s data.txt<br /><br />Шифрование<br />cryptcp -sign -f "e:\cps\in.cer" -nochain data.txt data.p7s<br />cryptcp -encr -f "e:\cps\out.cer" -nochain data.p7s data.p7s.p7m<br /><br />in.cer и out.cer - сертификаты с алгоритмом гост<br /><br /><br />Как аналогичное сделать на CryptoPro.NET ? <br />byte[] Decrypt( byte[] crypted )<br />byte[] Encrypt( byte[] data )<br /><br />Еще вопрос - нужно ли создавать контейнеры ключей в реестре ? При попытке решить данную задачу через Gost3410CryptoProvider требовалось имя контейнера,<br />но если посмотреть на пример с cryptcp , то имя контейнера не указано, соотвественно возможно оно излишне ?</td></tr></table>