如何从 C# 中的 .Net DLL 中提取 public 密钥?

How to extract public key from a .Net DLL in C#?

我想在 C# 中从自动代码签名的 .Net DLL 中提取 public 密钥,而不是 public 密钥令牌?

要从 Autenticode 签名的 .Net 库中获取 public 密钥,请使用以下代码:

Assembly assembly = Assembly.LoadFrom("dll_file_name");
X509Certificate certificate = assembly.ManifestModule.GetSignerCertificate();

byte[] publicKey = certificate.GetPublicKey();

但这只有在证书安装到受信任的根证书颁发机构时才有效。否则,GetSignerCertificate() returns null.

第二种方法允许获取证书,即使它不在受信任的根证书颁发机构中。

X509Certificate executingCert = X509Certificate.CreateFromSignedFile("dll_file_name");
byte[] publicKey = certificate.GetPublicKey();