7

私の製品は、(システムにMicrosoft SDKをインストールせずに).snkファイルを生成できる必要があります。動作する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プロパティを使用して、スマートカードキーのパスワードを指定します。このプロパティを使用してパスワードを指定すると、パスワードダイアログはユーザーに表示されません。

この質問への回答も参照してください:RSACryptoServiceProviderKeyPasswordの単純な使用は失敗します

これに加えて、パスワードで.snkファイルを保護できるようには思えません。この場合にできることは、代わりにPKCS#12ファイル(.pfx)を使用することです。このファイルは、アセンブリの署名に使用でき、パスワードで保護することもできます。BouncyCastle.NETなどのライブラリを使用してPKCS#12ファイルを生成できます。これを行う方法については優れたドキュメントがあるので、ここでは詳しく説明しません。

例を参照してください:C#のみを使用してプログラムでX509証明書を生成することは可能ですか?

于 2011-07-24T11:46:07.077 に答える