7

我的产品需要能够生成 .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);
        }
    }
4

1 回答 1

2

您使用的KeyPassword参数用于其他目的,而不是您尝试使用它的目的。从文档中:

使用 KeyPassword 属性为智能卡密钥提供密码。当您使用此属性指定密码时,不会向用户显示密码对话框。

另请参阅此问题的答案:简单使用 RSACryptoServiceProvider KeyPassword 失败

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

参见例如:是否可以仅使用 C# 以编程方式生成 X509 证书?

于 2011-07-24T11:46:07.077 回答