公钥:11234d300d06092a864886f70d010101050003818b0030818702818100a3dc132169d3a3f0a3df4f7014d7c741ff6da7322b82d70f3ecdce16fac6349c8dfc63b1061fa11f8285d9afe6aa4f7ce01f645c9e0db3361d9ff9f165d23591f1f5e57833df4dcbd6ce7582208e8021d41a534ff0b5a5ed90d2642c51532668e3c90696c26c43b52cd4ec733c57b2fa4ca9ba03b606153e0aac01f9d1c3e523123243
签名:
4b3ef029516193b7d969ac1840083635a3e0901b8cd526caa44c1a072f496d7f0d4bca3942c0d9030bede37c7809b835cec787eb39e18b7596a724fba9805b24714dfbb0f4a3fb430b32e075254a114d4c38a0ac52ef46a0ad33dec3fbfc15417402a1399e65e46996c0cf49fc7ffca9222f8cd693c8376b6f928828967bec42
请问如何恢复签名以前的内容:

解决方案 »

  1.   

    我写的方法如下:
    public string  RSADecrypt(string KEY, string m_strDecryptString )
    {
    try
    {
    byte[] PlainTextBArray;
    byte[] DypherTextBArray;
    string Result; System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();


    RSAParameters PublicKey = new RSAParameters();
    PublicKey.Exponent = new byte[]{1,0,1};
    PublicKey.Modulus =Convert.FromBase64String(KEY);
    rsa.ImportParameters(PublicKey);
    PlainTextBArray =Convert.FromBase64String(m_strDecryptString);
    DypherTextBArray=rsa.Decrypt(PlainTextBArray, false);
    Result=(new UnicodeEncoding()).GetString(DypherTextBArray);
    return Result;
    }
    catch(Exception ex)
    {
    Response.Write(ex.Message);
    }
    return "";
    }
    调用:
    string key="11234d300d06092a864886f70d010101050003818b0030818702818100a3dc132169d3a3f0a3df4f7014d7c741ff6da7322b82d70f3ecdce16fac6349c8dfc63b1061fa11f8285d9afe6aa4f7ce01f645c9e0db3361d9ff9f165d23591f1f5e57833df4dcbd6ce7582208e8021d41a534ff0b5a5ed90d2642c51532668e3c90696c26c43b52cd4ec733c57b2fa4ca9ba03b606153e0aac01f9d1c3e523123243";
    string data="4b3ef029516193b7d969ac1840083635a3e0901b8cd526caa44c1a072f496d7f0d4bca3942c0d9030bede37c7809b835cec787eb39e18b7596a724fba9805b24714dfbb0f4a3fb430b32e075254a114d4c38a0ac52ef46a0ad33dec3fbfc15417402a1399e65e46996c0cf49fc7ffca9222f8cd693c8376b6f928828967bec42";
    RSADecrypt(key,data);
    出现错误提示:"不正确的项"请大家帮忙分析一下.谢谢了
      

  2.   

    数字签名和加密不同, 它是用来验证消息未被篡改的. 是原消息经过单向散列函数处理之后的输出. 所以即使你有Public/Private Key,也不可能将它恢复到原来的消息。
      

  3.   

    //用公匙加密
    private void button4_Click(object sender, System.EventArgs e)
    {   
       
    crypt=new RSACryptoServiceProvider();
    UTF8Encoding enc=new UTF8Encoding();
    bytes=enc.GetBytes(textBox1.Text);
    crypt.FromXmlString(  readpublickey );
    bytes = crypt.Encrypt( bytes,false );
    string encryttext=enc.GetString(bytes);//encryptbyte);
    richtext2.Text="\n"+encryttext+"\n";  
    }
    //用私钥解密
    private void button5_Click(object sender, System.EventArgs e)
    {
       
    UTF8Encoding enc=new UTF8Encoding();
    byte [] decryptbyte;
    crypt.FromXmlString ( readprivatekey ) ;
    decryptbyte = crypt.Decrypt( bytes,false );
    string decrypttext=enc.GetString( decryptbyte );
    richtext3.Text = "\n" + decrypttext + "\n" ;
      
    }
      

  4.   

    楼主,应该是你用base64解码公钥出错了,那个并不是公钥编码就算你得到公钥恐怕也不行,我很奇怪微软的设计RSAParameters 无法读取der编码的RSA密钥对,竟然要传Modulus(需要der解码啊)loadxml的时候要一个xml格式的公钥,为什么不能load der格式呢!!!万恶的微软,难道必须用cryptoapi么???