【问题标题】:Generate Encrypted RSA PEM with C#使用 C# 生成加密的 RSA PEM
【发布时间】:2014-01-23 15:25:32
【问题描述】:

我在使用 C# 生成加密 PEM 格式的 RSA 私钥时遇到问题 我有这个:

-----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 生成的。

问候

【问题讨论】:

  • OpenSSL 具有在各种密钥/证书格式之间进行转换的功能。我建议使用它们而不是尝试自己编写代码。
  • 谢谢。第二个 PEM 是使用“openssl rsa file.pem -des3 file_enc.enk.key -passout pass:myp@ss”生成的,我需要它与 c#

标签: rsa private-key pem


【解决方案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);
    }

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 1970-01-01
    • 2019-05-08
    • 2022-08-10
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多