Как создать файл ключа SNK со строгим именем с помощью библиотек .net - PullRequest
7 голосов
/ 31 мая 2011

Мой продукт должен иметь возможность генерировать файлы .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);
        }
    }

1 Ответ

2 голосов
/ 24 июля 2011

Используемый вами параметр KeyPassword предназначен не для той цели, для которой вы пытаетесь его использовать.Из документации:

Используйте свойство KeyPassword, чтобы указать пароль для ключа смарт-карты.Когда вы задаете пароль с помощью этого свойства, диалоговое окно ввода пароля пользователю не будет предоставлено.

См. Также ответ на этот вопрос: Простое использование RSACryptoServiceProvider KeyPassword не удается

Кроме того, не похоже, что вы можете защитить файлы .snk с помощью пароля.В этом случае вы можете использовать файл PKCS # 12 (.pfx), который можно использовать для подписи сборок, а также для защиты паролем.Вы можете создать файл PKCS # 12, используя библиотеку, такую ​​как BouncyCastle.NET .Существует хорошая документация о том, как это сделать, поэтому я не буду вдаваться в подробности.

См., Например: Можно ли программно сгенерировать сертификат X509, используя только C #?

...