Как создать файл ключа SNK со строгим именем с помощью библиотек.net
Мой продукт должен иметь возможность генерировать файлы.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 ответ
Используемый вами параметр KeyPassword предназначен не для той цели, для которой вы пытаетесь его использовать. Из документации:
Используйте свойство KeyPassword, чтобы указать пароль для ключа смарт-карты. Когда вы задаете пароль с помощью этого свойства, диалоговое окно ввода пароля не будет отображаться для пользователя.
См. Также ответ на этот вопрос: простое использование RSACryptoServiceProvider KeyPassword не удается
Кроме того, не похоже, что вы можете защитить файлы.snk с помощью пароля. В этом случае вы можете использовать вместо этого файл PKCS#12 (.pfx), который можно использовать для подписи сборок, а также для защиты паролем. Вы можете создать файл PKCS#12, используя библиотеку, такую как BouncyCastle.NET. Существует хорошая документация о том, как это сделать, поэтому я не буду вдаваться в подробности.
См. Например: возможно ли программно создать сертификат X509, используя только C#?