Ada*_*dam 7 c# strongname cryptography snk
我的产品需要能够生成.snk文件(不需要在系统上安装Microsoft SDK).我可以生成一个工作的SNK文件,但是在指定密码时我似乎无法使其工作.谁能给我一些指示?这是我到目前为止:
internal static void CreateKeyPairFile(string fileName, int keySize, string password)
{
if ((keySize % 8) != 0)
{
throw new CryptographicException("Invalid key size. Valid size is 384 to 16384 mod 8. Default 1024.");
}
CspParameters parms = new CspParameters();
parms.KeyNumber = 2;
if (null != password)
{
var passwordString = new System.Security.SecureString();
foreach (char c in password)
{
passwordString.AppendChar(c);
}
parms.Flags = CspProviderFlags.UseUserProtectedKey;
parms.KeyPassword = passwordString;
}
RSACryptoServiceProvider provider = new RSACryptoServiceProvider(keySize, parms);
byte[] array = provider.ExportCspBlob(!provider.PublicOnly);
using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
fs.Write(array, 0, array.Length);
}
}
Run Code Online (Sandbox Code Playgroud)
您使用的KeyPassword参数的目的与您尝试使用的目的不同。从文档中:
使用 KeyPassword 属性为智能卡密钥提供密码。当您使用此属性指定密码时,将不会向用户显示密码对话框。
另请参阅此问题的答案:简单使用 RSACryptoServiceProvider KeyPassword 失败
除此之外,您似乎无法使用密码保护 .snk 文件。在这种情况下,您可以做的是使用PKCS#12文件 (.pfx),该文件可用于对程序集进行签名,并且还可以受密码保护。您可以使用BouncyCastle.NET等库生成 PKCS#12 文件。有关于如何执行此操作的很好的文档,因此我不会在这里详细介绍。
例如,请参阅:是否可以仅使用 C# 以编程方式生成 X509 证书?