C# 对哈希签名有问题

C# 对哈希签名有问题,c#,hash,cryptography,sign,C#,Hash,Cryptography,Sign,我从MSDN复制了以下代码。我必须用公钥签署一个散列。当我加上 RSA.FromXmlString(PublicKey); 按照下面的代码,它显示异常 Object contains only the public half of a key pair. A private key must also be provided. 我做错了什么?这是使用给定公钥对哈希进行签名的正确方法吗 我正在Windows 7 Pro 64 bis操作系统上使用Microsoft Visual C#Expre

我从MSDN复制了以下代码。我必须用公钥签署一个散列。当我加上

RSA.FromXmlString(PublicKey);
按照下面的代码,它显示异常

Object contains only the public half of a key pair. A private key must also be provided.
我做错了什么?这是使用给定公钥对哈希进行签名的正确方法吗

我正在Windows 7 Pro 64 bis操作系统上使用Microsoft Visual C#Express 2010

    try
    {
        //Create a new instance of RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
        RSA.FromXmlString(PublicKey);
        //The hash to sign.
        byte[] Hash = { 59, 4, 248, 102, 77, 97, 142, 201, 210, 12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135 };

        //Create an RSAOPKCS1SignatureFormatter object and pass it the 
        //RSACryptoServiceProvider to transfer the key information.
        RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter((AsymmetricAlgorithm)RSA);

        //Set the hash algorithm to SHA1.
        RSAFormatter.SetHashAlgorithm("SHA1");

        //Create a signature for HashValue and return it.
        byte[] SignedHash = RSAFormatter.CreateSignature(Hash);

    }
    catch (CryptographicException e)
    {
        Console.WriteLine(e.Message);

    }
编辑:这是什么

RSA.FromXmlString(PublicKey);

是吗?签名此哈希时是否需要它?

问题是使用公钥签名。您可以使用私钥对哈希进行签名。公钥用于验证

填写RSAKeyInfo参数

你需要看看这个


RSA.FromXmlString(RSAKeyInfo)

你不能用公钥签署任何东西,这与签名的想法相矛盾。“我从MSDN复制了以下代码”:请提供链接,因为Eugene是对的。我想知道你怎么能在MSDN中找到这样的样品。