gpt4 book ai didi

c# - 如何从 pfx/cer 创建 snk?

转载 作者:IT王子 更新时间:2023-10-29 04:10:40 27 4
gpt4 key购买 nike

微软似乎创造了一个认证丛林,这很难理解。

  • Microsoft X.509 证书 (.cer)
  • 个人信息交换 (.pfx)
  • 程序集签名 key 属性 (.snk)

    1. 基于 pfx 或 cer 创建 snk 文件是否可取?(不确定这是否可能,如果可能的话是怎么做到的?)

    2. 虽然可以使用受密码保护的 pfx 对程序集进行签名,但它似乎没有很强的名字,除非它是用 snk 签名的反而。但是snk没有密码保护。哪个更安全使用?因为我是我项目中唯一的开发人员,所以我没有多开发者安全环境问题,但还是想知道什么是最好的方法。

非常感谢,

最佳答案

关于您提到的文件类型的一些说明:

  • .cer-文件是 X.509 证书
  • .pfx - 文件是使用基于密码的对称 key 加密的 X.509 证书,另请参阅 PKCS #12 (Wikipedia)
  • .snk-文件仅包含 RSA key (公共(public)/私有(private)或仅公共(public))

无论您是使用.pfx 文件还是.snk 文件对程序集进行签名都没有关系,无论哪种方式,它都会获得强命名。将 RSA key 存储为加密证书 (.pfx) 当然比仅存储未加密 key (.snk) 更安全。

您可以使用 System.Security.Cryptography.X509Certificates.X509Certificate2 类轻松地从代码中的这些文件中提取 key 。

.pfx 中提取 key :

/// <summary>
/// Converts .pfx file to .snk file.
/// </summary>
/// <param name="pfxData">.pfx file data.</param>
/// <param name="pfxPassword">.pfx file password.</param>
/// <returns>.snk file data.</returns>
public static byte[] Pfx2Snk(byte[] pfxData, string pfxPassword)
{
// load .pfx
var cert = new X509Certificate2(pfxData, pfxPassword, X509KeyStorageFlags.Exportable);

// create .snk
var privateKey = (RSACryptoServiceProvider)cert.PrivateKey;
return privateKey.ExportCspBlob(true);
}

使用 privateKey.ExportCspBlob(false) 只提取公钥! (例如,延迟签署程序集)

关于c# - 如何从 pfx/cer 创建 snk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com