1

現在、証明書 (および秘密鍵) を指定して byte[] に署名するルーチンがあります。ただし、証明書/キーのタイプは「RSA キーを使用した証明書」としてハードコードされています。そのコードは次のとおりです。

public byte[] Sign(byte[] bytesToSign, bool fOAEP, X509Certificate2 certificate)
{
    using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider())
    {
        // HACK: Round-trip the key to XML and back, to get provider type working
        // as 'Microsoft Enhanced RSA and AES Cryptographic Provider' (for  
        // SHA256/SHA512 signing hash) instead of 'Microsoft Enhanced 
        // Cryptographic Provider v1.0' (that limits us to SHA1)
        string publicKeyXml = certificate.PrivateKey.ToXmlString(true);
        provider.FromXmlString(publicKeyXml);

        // We use the private key to sign.
        return provider.SignData(bytesToSign, CryptoConfig.MapNameToOID("SHA512"));
    }
}

証明書が RSA キーを使用している場合は 1 つの方法で処理し、EC キーを使用している場合は別の方法で処理するように、より柔軟にしたいと考えています。基本的に、Crypto Service Provider のタイプは別のタイプになります。

したがって、核となる質問は次のとおりです。

  • 公開鍵と秘密鍵を含む証明書 (署名用) または公開鍵のみを含む証明書 (検証用) が与えられた場合、証明書で使用される鍵の種類をどのように判断しますか?

私は、標準の .NET ライブラリまたは BouncyCastle.Org ライブラリに対してもオープンです。

4

1 に答える 1

0

certificate.PublicKey.Oid で鍵の種類 (アルゴリズム) を確認できます。ここでは、Microsoft OID でサポートされていることを確認できます: http://msdn.microsoft.com/en-us/library/ff635835.aspx その他の OID は、oid-info.com で確認できます。

于 2013-02-04T08:51:45.443 に答える