簡體   English   中英

如何使用 .net 庫生成強命名 SNK 密鑰文件

[英]How to generate strong-naming SNK key file with .net libraries

我的產品需要能夠生成 .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參數用於其他目的,而不是您嘗試使用它的目的。 從文檔中:

使用 KeyPassword 屬性為智能卡密鑰提供密碼。 當您使用此屬性指定密碼時,不會向用戶顯示密碼對話框。

另請參閱此問題的答案: 簡單使用 RSACryptoServiceProvider KeyPassword 失敗

除此之外,您似乎無法使用密碼保護 .snk 文件。 在這種情況下,您可以使用PKCS#12文件 (.pfx) 代替,該文件可用於對程序集進行簽名,也可以使用密碼保護。 您可以使用BouncyCastle.NET等庫生成 PKCS#12 文件。 關於如何做到這一點有很好的文檔,所以我不會在這里詳細介紹 go。

參見例如: 是否可以僅使用 C# 以編程方式生成 X509 證書?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM