2

Я хочу создать .pem файл для открытого ключа, генерируемого этого методомСоздать .pem файл открытого ключа RSA шифрования C# .net

public static Tuple<string, string> CreateKeyPair() 
{ 
    CspParameters cspParams = 
     new CspParameters { 
      ProviderType = 1 /* PROV_RSA_FULL */ 
     }; 

    RSACryptoServiceProvider rsaProvider = 
     new RSACryptoServiceProvider(1024, cspParams); 

    string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false)); 
    string privateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true)); 

    return new Tuple<string, string>(privateKey, publicKey); 
} 

Потому что я порождающий этот ключ для мобильного приложения, и они не могут читать это, они просили .pem файл вместо открытого ключа как строку

Пожалуйста, советы,

ответ

5

Во-первых, так называемый .pem файл на самом деле не фиксированный спецификации или формат. Несколько различных типов различных форматов файлов обычно описываются как файлы «PEM». Когда проект SSLeay (теперь OpenSSL), необходимый для создания файла с кодировкой base64, содержащего ключевую информацию, они заимствовали концепции форматирования из старых RFC-адресов с защитой конфиденциальности 1421 -1424, и они добавили расширение .pem в конец этих файлов. Но такой файл может содержать открытые ключи, закрытые ключи, запросы сертификатов, сертификаты, списки сертификатов и т. Д. Все разные. Поэтому, если вам все будет сказано, что вы должны создать файл .pem, вам придется угадать, что действительно нужно.

Самый простой способ написать такие файлы - использовать Bouncycastle C# library. В пакете Org.BouncyCastle.OpenSsl содержится ряд утилит, включая класс PemWriter, который должен вам помочь.

+0

Спасибо за ваш повтор, –

+0

Не используйте 'Org.BouncyCastle.OpenSsl', потому что у него нет примеров и очень плохой документации для C#! Я работал по той же проблеме, и эта библиотека действительно помогает мне: 'https: // github.com/jrnker/CSharp-easy-RSA-PEM'.У этого есть хорошие примеры, и вы можете решить свою проблему, используя только * one * * line * (вместо того, чтобы реализовывать некоторые интерфейсы от 'BouncyCastle')! –

+0

@ В.Панченко: Спасибо за ваш комментарий. Пожалуйста, подумайте о том, чтобы написать ответ на этот вопрос с помощью однострочного шрифта в качестве примера. –

3

В последнее время мне нужно сохранить PublicKey и PrivateKey, сгенерированные в моем приложении C#, в файл, и позже будет работать с ним. Я использую для этой цели такую ​​библиотеку, как CSharp-easy-RSA-PEM.

Это очень простое и быстрое решение, поэтому я рекомендую эту библиотеку другим ребятам.

Я использую следующий код, чтобы получить PublicKey как string (и сохранить его в pem файл в формате Base64):

string publicKeyStr = Crypto.ExportPublicKeyToX509PEM(_cryptoServiceProvider); 

она возвращает что-то вроде этого:

-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxnBvS8cdsnAev2sRDRYWxznm1 
QxZzaypfNXLvK7CDGk8TR7K+Pzsa+tpJfoyN/Z4B6xdlpsERo2Cu6AzolvrDLx5w 
ZoI0kgdfaBMbUkdOB1m97zFYjKWoPeTskFzWZ3GHcQ3EXT0NJXXFXAskY45vEpbc 
5qFgEhcPy3BMqHRibwIDAQAB 
-----END PUBLIC KEY----- 

И я использую следующий код для получения PrivateKey как string:

string privateKeyStr = Crypto.ExportPrivateKeyToRSAPEM(_cryptoServiceProvider); 

возвращает что-то вроде этого:

-----BEGIN RSA PRIVATE KEY----- 
MIICWwIBAAKBgQCxnBvS8cdsnAev2sRDRYWxznm1QxZzaypfNXLvK7CDGk8TR7K+ 
Pzsa+tpJfoyN/Z4B6xdlpsERo2Cu6AzolvrDLx5wZoI0kgdfaBMbUkdOB1m97zFY 
jKWoPeTskFzWZ3GHcQ3EXT0NJXXFXAskY45vEpbc5qFgEhcPy3BMqHRibwIDAQAB 
AoGAAdwpqm7fxh0S3jOYpJULeQ45gL11dGX7Pp4CWHYzq1vQ14SDtFxYfnLWwGLz 
499zvSoSHP1pvjPgz6lxy9Rw8dUxCgvh8VQydMQzaug2XD1tkmtcSWInwFKBAfQ7 
rceleyD0aK8JHJiuzM1p+yIJ/ImGK0Zk2U/svqrdJrNR4EkCQQDo3d5iWcjd3OLD 
38k1GALEuN17KNpJqLvJcIEJl0pcHtOiNnyy2MR/XUghDpuxwhrhudB/TvX4tuI0 
MUeVo5fjAkEAw0D6m9jkwE5uuEYN/l/84rbQ79p2I7r5Sk6zbMyBOvgl6CDlJyxY 
434DDm6XW7c55ALrnlratEW5HPiPxuHZBQJANnE4vtGy7nvn4Fd/mRQmAYwe695f 
On1iefP9lxpx3huu6uvGN6IKPqS2alQZ/nMdCc0Be+IgC6fmNsGWtNtsdQJAJvB4 
ikgxJqD9t8ZQ2CAwgM5Q0OTSlsGdIdKcOeB3DVmbxbV5vdw8RfJFjcVEbkgWRYDH 
mKcp4rXc+wgfNFyqOQJATZ1I5ER8AZAn5JMMH9zK+6oFvhLUgKyWO18W+dbcFrBd 
AzlTB+HHYEIyTmaDtXWAwgBvJNIHk4BbM1meCH4QnA== 
-----END RSA PRIVATE KEY----- 

Затем вы можете использовать

RSACryptoServiceProvider publicX509key = Crypto.DecodeX509PublicKey(publicKeyStr); 
RSACryptoServiceProvider privateRSAkey = Crypto.DecodeRsaPrivateKey(privateKeyStr); 

восстановить сохраненные ключи обратно в RSACryptoServiceProvider.

Так что, если кто-то нужно решить подобную проблему, вы можете просто скачать this библиотеку, перейдите Solution Explorer -> (Right click on your project) -> Add -> Reference -> Overview в вашем Visual Studio добавить эту библиотеку в проекте, а также добавить using CSharp_easy_RSA_PEM;, где вам это нужно :)

+0

Похож на приятное решение. –

Смежные вопросы