0

DSACryptoServiceProvider でキー ペアを生成しようとしています。

コードは次のとおりです。

        var cspParameters = new CspParameters();
        cspParameters.Flags = CspProviderFlags.CreateEphemeralKey;
        cspParameters.KeyContainerName = Guid.NewGuid().ToString();

        DSA dsa = new DSACryptoServiceProvider(2048, cspParameters); // Generate a new 2048 bit RSA key

        string publicPrivateKeyXML = dsa.ToXmlString(true);
        string publicOnlyKeyXML = dsa.ToXmlString(false);

dsa.ToXmlString(true);の例外が発生します:無効なフラグが指定されました。どうしたの?

4

3 に答える 3

0

ここにはいくつかの問題があります。

  1. (「無効なフラグ」のソース) 一時キーを要求しましたが、名前が付けられました。キーに名前を付けると、永続化されたものとしてマークされます。永続的な一時キーを要求したため、システムが混乱しています。
  2. DSACryptoServiceProviderは、DSA に対する FIPS-186-3 更新をサポートしていません。DSA-1024 を使用するか、.NET 4.6.2 にアップグレードしてDSACng、FIPS-186-3 (キー サイズの増加、および SHA-2 (SHA256、SHA384、SHA512) ハッシュ) をサポートする を使用する必要があります。
  3. デフォルトCspParametersオブジェクトの値はProviderType=24 で、RSA 用です。DSA 用の 13 を使用する必要があります。マジック ナンバーは、wincrypt.h (PROV_RSA_AES=24、PROV_DSS_DH=13) ではあまりマジックではありません。
  4. 一時的な DSACryptoServiceProvider が必要な場合、最も簡単な方法は、CspParameters オブジェクトを指定せず、デフォルトを使用することです。

これらの作品のいずれか:

{
    const int PROV_DSS_DH = 13;
    var cspParameters = new CspParameters(PROV_DSS_DH);
    DSA dsa = new DSACryptoServiceProvider(1024, cspParameters);

    string publicPrivateKeyXML = dsa.ToXmlString(true);
    string publicOnlyKeyXML = dsa.ToXmlString(false);
}

{
    const int PROV_DSS_DH = 13;
    var cspParameters = new CspParameters(PROV_DSS_DH);
    cspParameters.Flags = CspProviderFlags.CreateEphemeralKey;

    DSA dsa = new DSACryptoServiceProvider(1024, cspParameters);

    string publicPrivateKeyXML = dsa.ToXmlString(true);
    string publicOnlyKeyXML = dsa.ToXmlString(false);
}

{
    DSA dsa = new DSACryptoServiceProvider(1024);

    string publicPrivateKeyXML = dsa.ToXmlString(true);
    string publicOnlyKeyXML = dsa.ToXmlString(false);
}
于 2016-08-14T18:27:57.057 に答える
0

最大キーサイズ プロパティは 1024 です。次の記事を参照してください: DSACryptoServiceProvider.KeySize プロパティ

「このアルゴリズムは、64 ビット単位で 512 ビットから 1024 ビットまでのキーの長さをサポートします。」

于 2012-06-19T11:26:04.920 に答える