#c# #encryption
#c# #шифрование
Вопрос:
Друзья,
Мы приобрели сертификаты класса 3 как .pfx, так и .cer у центра сертификации. И shared .cer(открытый ключ) нашему партнеру.
Шифрование (Java)
Наш партнер зашифровал сообщение (с помощью нашего открытого ключа), используя стандарт openpgp Java bouncy castle, и передал зашифрованное сообщение, как показано ниже, —— НАЧАТЬ СООБЩЕНИЕ PGP —— Версия: x v2hQEMAzFXJ94q1Nm8AQf /Tld0/3dAvgFKPQVBS8bmbXChXeApeReo1ydNS …… —— ЗАВЕРШЕНИЕ PGPСООБЩЕНИЕ——
Расшифровка: (C #)
Нам нужно расшифровать сообщение с помощью нашего файла .pfx.
Я просмотрел следующие статьи, http://burnignorance.com/c-coding-tips/pgp-encryption-decryption-in-c / Похоже, что новая PGPKeyPair генерируется и используется для шифрования и дешифрования.
Но в моем случае у меня есть файл .pfx Как нам извлечь ключ pgpprivate из файла .pfx, используемого для расшифровки? Не могли бы вы поделиться некоторыми мыслями о том, как мы можем это сделать. Заранее спасибо за все ваше время на это.
13/12/2020
Я импортировал файл X509Certificate .pfx в хранилище, как показано ниже, и пытался преобразовать ключ pgpprivate,
string certPath = @"C:Userstest.pfx";
string certPass = "apples";
// Create a collection object and populate it using the PFX file
X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import(certPath, certPass, X509KeyStorageFlags.PersistKeySet);
X509Certificate2 certificate = collection[0];
AsymmetricAlgorithm x509PrivateKey = certificate.PrivateKey;
PgpPrivateKey pK = x509PrivateKey; //Here i am gettting the invalid conversion error.
Я пытаюсь использовать закрытый ключ сертификата X.509 в качестве PGPrivatekey при расшифровке. Но при назначении закрытого ключа pgpprivatekey возникает недопустимое исключение приведения.
Есть ли какой-либо способ добиться этого?
С уважением, Сталин
Комментарии:
1. Используйте метод импорта : docs.microsoft.com/en-us/dotnet/api /…
2. Спасибо. Я уже импортировал сертификат в объект X509Certificate2. Но я не знаю о преобразовании X.509 PrivateKey в объект PGPPrivatekey для использования алгоритма дешифрования PGP.
3. Вам нужен закрытый ключ, который вы можете получить из X509Certificate2 : docs.microsoft.com/en-us/dotnet/api /…
4. Как вы упомянули, я попытался импортировать сертификат X.509 (.pfx) в хранилище и получил объект privatekey и попытался преобразовать в pgpprivatekey, который можно использовать в процессе PGPdecrition, аналогично blog, burnignorance.com/c-coding-tips/pgp-encryption-decryption-in-c Однако получение недопустимого исключения приведения при назначении privatekey для pgprivatekey. Не могли бы вы поделиться своими мыслями. Я также добавил соответствующий код
Ответ №1:
Вы можете попробовать использовать BouncyCastle API для чтения файла pfx с использованием файла класса PKCS12, а затем преобразовать ключ в PgpSecretKey.
прочитайте документ в —> pkcs12.getKey() и классе PgpSecretKey.
public static void GetPriveKey(String pfxFile, String pfxPassword)
{
//Load PKCS12 file
Pkcs12Store pkcs12 = new Pkcs12Store(new FileStream(pfxFile, FileMode.Open, FileAccess.Read), pfxPassword.ToArray());
string keyAlias = null;
foreach (string name in pkcs12.Aliases)
{
if (pkcs12.IsKeyEntry(name))
{
keyAlias = name;
break;
}
}
//
AsymmetricKeyParameter Privatekey = pkcs12.GetKey(keyAlias).Key;
X509CertificateEntry[] ce = pkcs12.GetCertificateChain(keyAlias);
AsymmetricKeyParameter PublicKey= ce[0].Certificate.GetPublicKey();
PgpSecretKey mySecretKey = new PgpSecretKey(PgpSignature.DefaultCertification,
PublicKeyAlgorithmTag.RsaGeneral,
PublicKey,
Privatekey,
DateTime.UtcNow,
keyAlias,
SymmetricKeyAlgorithmTag.Cast5,
pfxPassword.ToCharArray(),
true,
null,
null,
new SecureRandom());
}