Создание зашифрованного RSA PEM с помощью C #

У меня проблемы с созданием закрытого ключа RSA в формате Encrypted PEM с C #. У меня есть следующее:

-----BEGIN PRIVATE KEY-----

MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOWsj2WijN35Rxbt
ge2omKZCPNf3AchRxzUpnIEEHz/l9myBn+yZZLhJ3oec+z0ZJO2dOYzhsSDHbw3e
6VSyFpoES1mje2yPCQFX/JVDdJHIwOSoEDY0SNty6b578x0IweI8jV5IYcSl0RK3
nlrRLo3bg9bvfZebdlsaA6nW2G3XAgMBAAECgYEA31S3r52rmuEdtnbHI8EQhoLc
RSikLBURP2myDGZkuK61u3ckel4CaY0y/O2yBAxiM0fyQULpCTXEkFlUzI3LmKoj
/L0cSlk58xf8hB837/fn/bulnATWSajKn/p4ecXpBlPTySf9MPwoyNwXdyjjz0bQ
c6oo1U42VybQRNgvWGECQQD/bs/aDjypd9AGUVFn6l6zoQEFRjNLevsHUEveD871
UUmdkE9AXNyUR1k9W+OH1V74eS29spNphEnnCVV7ANVHAkEA5i8bXxa7g6Tue2/N
kOjFK5i54RTaGPbjvPcg1N1Wq8pew0lx0lY3q7A+qH3VjiJHwSRifY7n92zkxutS
qF4q8QJBAIcopYcmfWbW5RZStRadZ1r5WMbnrIDGJEpsbJimGMaqKp/bGnReLsGv
N0NGehEIEGa+CDwWX/Y3b7t2ruqVOEUCQEVgw2Y4qtH13y9zNklL70nBoZzWtRm7
KE8nSUz/XYUv3LoNo/HarLLhzzDnpHtPl8L+HXVsojvwJVBTUzmOEHECQAbb2iy3
tRNcIWj770+6+9qj5fKKvhNNtBoh5rzu79PA9Un8pxEy7OTSVQJ+HtwoRzUrxK07
IYp9K9Sbyy0yqkc=

-----END PRIVATE KEY-----

Но мне это нужно:

-----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,A07111D1F6B87B67

mPmRmxCSDcdP6JW9BG12vp33aV1oxc3PRKwbBZJx8noV8RzqR4OnPEI9YzyvhLPT
APy1XWNhlNa0CPIPEPr1XAJBgkmIBH4RAcjqAvW7X3FbDt5TTkCWad15aCQdRiZN
vsab9/zX96GePrRyPkiVvTebhyHb0bsEaTl5ryYRcEos0aPreOSm+QJrQ4437I7C
X5rLMm5mfh7a/BoYN4weH3rOku4+ZFQp3UMPM5HWEoAK/F2hFYPcR0p9h84QrlPO
WVg5A5dN+28tk6LkWmdfTCXzV3r5jI3Pwo5eI8N6EWCyHMIfwZYIDKymSrCvF5i/
XXTh3OFtH1RoFJ9mchWacBN5lDck/2+/GBN5uQs3/Am7pQ4u/S1PBnT4bK4EjAf9
P6kYKT4aPIarqR2tIJ9HDfEZ3JbsvLbvqJSaxGGhXsRzSylL6W3/IpoxKNFCF39x
xEqXlN7OvW4fWA5HfM+fBQWNMcyt9FIv418+Z+GmT5TFG8BgaDcniKIk0XnfdDAw
AajBobsGnFYe/Bk8qbMBQSDs9j0kGV2UE9LCPOh1P1JnLgiBsQeocbVc6FO3v7Kr
kD3/aGRYMBJ80//0AzIJ/8m2Y+8y9D4i70KSCuC7WjTB85Nl6I77y8w1q3md4WJW
TbINsCOmb8MpMLIOuS800PgCDM423FaekrmDnfRQKgv0aBPQd5+PY56t+kRzAXCT
uihv+Pq7Rjpwbjewf/LI4Slt6o8o69VaNjDTOZiW3CYrxv4QQjKmdNdo12av+aJg
9ts6SgEd6w0nyl/niBMWHhMCV6aZT7SAm0k3GJoDpJN+CbxiJaHV9g==

-----END RSA PRIVATE KEY-----

PEM верхнего уровня был создан с помощью C # и Bouncy Castle, второй - с помощью openssl.exe.

С Уважением


person tyrodeveloper    schedule 23.01.2014    source источник
comment
OpenSSL имеет функции для преобразования между различными форматами ключей / сертификатов. Я бы посоветовал использовать их, а не пытаться кодировать самостоятельно.   -  person twalberg    schedule 23.01.2014
comment
Спасибо. Второй PEM был сгенерирован с помощью openssl rsa file.pem -des3 file_enc.enk.key -passout pass: myp @ ss Мне это нужно с С #   -  person tyrodeveloper    schedule 23.01.2014


Ответы (1)


Я не уверен, что это то, что вам нужно, и я новичок в использовании этих фреймворков. Но если вы используете Bouncy Castle, вот пример зашифрованного закрытого ключа. Заголовки, я думаю, вы можете найти в объекте pem (pem.Headers), а строки начала и конца предназначены только для демонстрации:

    static void Main(string[] args)
    {
        Console.WriteLine(GeneratePrivateKey("12345", 4096, 4));
        Console.ReadLine();
    }

    static string GeneratePrivateKey(string password, int strength, int iterationCount)
    {
        var rsa = new Org.BouncyCastle.Crypto.Generators.RsaKeyPairGenerator();
        rsa.Init(new Org.BouncyCastle.Crypto.KeyGenerationParameters(new Org.BouncyCastle.Security.SecureRandom(), strength));
        var asym = rsa.GenerateKeyPair();
        var generator = new Org.BouncyCastle.OpenSsl.Pkcs8Generator(asym.Private, Org.BouncyCastle.OpenSsl.Pkcs8Generator.PbeSha1_3DES);
        generator.IterationCount = iterationCount;
        generator.Password = password.ToCharArray();
        var pem = generator.Generate();
        return Convert.ToBase64String(pem.Content);
    }
person random user 42    schedule 10.05.2016