Как использовать сертификаты p7b и p12

Здравствуйте, моя цель состоит в том, чтобы зашифровать пароль zipfile. На данный момент мне нужно было только генерировать SHA Hash который будет моим паролем и использовал RSA-Cryptoprovider со мной закрытый ключ для шифрования пароля.

Теперь мне нужно использовать .p7b а также .p12 сертификаты для выполнения этой задачи. Но я не понимаю, для чего мне нужны эти файлы, после некоторого исследования я понял, что .p12 будет, вероятно, файл, который я использую для шифрования своего пароля, но что мне нужно .p7b за?

Это то, что я сделал до сих пор с ним, кажется, работает, потому что я могу прочитать строку, но все же, что мне нужно, мой .p7b файл для?

var password = @"test";
var p12FilePath = @"key\Test.p12";
var text = @"myFutureZipPassword";

X509Certificate2 cert = new X509Certificate2(p12FilePath, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
byte[] certData = cert.Export(X509ContentType.Pfx, password);
RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)cert.PrivateKey;

SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data = encoding.GetBytes(text);
byte[] hash = sha1.ComputeHash(data);
var sign = rsaKey.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));


var str = System.Text.Encoding.Default.GetString(sign);

1 ответ

Решение

Ни p12 - расширение для хранилищ ключей / сертификатов PKCS#12 - ни .p7b - расширение для синтаксиса двоичных криптографических сообщений PKCS#7 - это сертификат.

PKCS#12 может использоваться для хранения нескольких цепочек закрытых ключей / сертификатов (требуется для подписи или дешифрования) или просто доверенных сертификатов (используется для проверки или шифрования). Другая информация может быть сохранена, но для вашего назначения вы должны просто использовать ее как хранилище ключей / сертификатов.

Стандарт PKCS#7 определяет синтаксис криптографических сообщений или CMS. Он определяет формат контейнера, который может использоваться для указания подписанных или конвертированных (читай: зашифрованных) сообщений / файлов. В то время как RSA сам по себе может шифровать небольшие файлы, PKCS#7 позволяет вам использовать четко определенную форму гибридного шифрования.

Формат контейнера указывает и может содержать сертификаты, используемые для шифрования, чтобы вы могли выбрать, какой ключ использовать. Он также определяет алгоритмы, используемые для выполнения шифрования. Чтобы использовать его, вам нужен API более высокого уровня, чем RSACryptoServiceProvider; он предоставляется в пространстве имен PKCS в среде.NET (начните с EnvelopedCms). PKCS расшифровывается как Стандарты шифрования с открытым ключом, которые были сначала созданы RSA Labs, а затем скопированы и продолжены в RFC.

Структура PKCS#12 и PKCS#7 была определена на языке, который определяет структуры данных, называемые ASN.1. Структуры затем кодируются с использованием двоичного формата кодирования, называемого BER / DER. Однако, чтобы убедиться, что сообщения правильно передаются через текстовый интерфейс, файл PKCS#7 часто защищен ASCII с использованием текстовой кодировки PEM, которая представляет собой всего лишь несколько строк верхнего / нижнего колонтитула с двоичным кодом в кодировке Base 64. b есть в имени файла, чтобы показать, что кодировка PEM не должна выполняться.

Обратите внимание, что иногда PKCS#7 / CMS также используется для простого хранения сертификатов, которые можно использовать для шифрования, поскольку для этого вам нужен только открытый ключ. Однако для этого гораздо лучше использовать PKCS#12.

Другие вопросы по тегам