C# 如何使用.net库生成强命名SNK密钥文件

C# 如何使用.net库生成强命名SNK密钥文件,c#,cryptography,strongname,snk,C#,Cryptography,Strongname,Snk,我的产品需要能够生成.snk文件(系统上没有安装Microsoft SDK)。 我可以生成一个工作的SNK文件,但在指定密码时,我似乎无法让它工作。 谁能给我一些指点吗? 这就是我到目前为止所做的: internal static void CreateKeyPairFile(string fileName, int keySize, string password) { if ((keySize % 8) != 0) {

我的产品需要能够生成.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);
        }
    }
您使用的参数的用途与您试图使用它的用途不同。从文件中:

使用KeyPassword属性为智能卡提供密码 钥匙使用此属性指定密码时,密码 对话框将不会显示给用户

另见此问题的答案:

除此之外,您似乎无法使用密码保护.snk文件。在这种情况下,您可以使用PKCS#12文件(.pfx),该文件可以用于对程序集进行签名,也可以进行密码保护。您可以使用库(如)生成PKCS#12文件。关于如何做到这一点,有很好的文档,所以我在这里不作详细介绍

请参阅示例:

当“密码”不为空时,“provider.ExportCspBlob”生成错误“指定的类型无效”