public Form1()
        {
            InitializeComponent();
        }
        public static string privatekey = "<RSAKeyValue><Modulus>sVZRceQFEJ0qUaG2lG4eIbq3MEoL8beAmyiF1QT1YPZdfKG9wfW0LbryH3+GzABiFjjDMzfYgGAiZhiPPZTcjiWfMK9/EoB3KImwOWzGT1E6buLrjpRdEzx6qB9WYeBLuJw+cKwRtyQJyfhq0/j38/3BmcWOk8lWwSFD23H68wE=</Modulus><Exponent>AQAB</Exponent><P>2Nt6Xi0Dr2wdn7DMO2jXfiwZVitwG6UabJ6jiNkrRwyQiapTc5EhHrZ+ZOxqVOAax7Q93Hh33MH93Nc7/TSikw==</P><Q>0ViyXtXvHiTRBd4HJ+PPlXwjz4ZnkWVUVQ2D9JLQ4+SNJP48cRpHS2qP+4PpTculN7hDjZ6kEzjQSwZbku/smw==</Q><DP>bL3J47WQ1oNRa4U9NEFDZcp5PgN0KPimgnceK/4yPGNpiw604AuTXxJF2RfPzhW+eAvCxW5HNJS2Vuo686JULw==</DP><DQ>jGtZIYGQJYD+b1gRJrGI0LT29EEsAPudyHsLUqaT1Pi9r92UPy0oOy7cKxG9EQCS7r/7F+gcGASYumomTHYAFw==</DQ><InverseQ>GOE3qc4d0tNIDBtuI0XPT4jfbqoR2DTpzEJu48XyftcdrHD+jsQ/vhEYG1V7lwl6Ml6EThoe759poPLYOh6yuA==</InverseQ><D>FDlV3Hk2oqhp1RluKwtL4Gjcz2MCbbSRtCAw8xQ3r7EpBDel3mLZA4YYasMuakF47jPW/xZVWH6eLaqLW2iIpnTExZR3112dp+h+bpaSCz/KVmXQGS3UXPGsbzsH8kV2acjCmPnkjwHgqtQwO0acNinBJp/3xfFB7TnIEeHFg2k=</D></RSAKeyValue>";
        public string decrypttext = "";
        private void button1_Click(object sender, EventArgs e)
        {
            RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();
            UTF8Encoding enc = new UTF8Encoding();
            byte[] bytes = enc.GetBytes(richTextBox1.Text);            byte[] decryptbyte;
            crypt.FromXmlString(privatekey);
             decryptbyte = crypt.Decrypt(bytes, false);//不正确的数据
            decrypttext = enc.GetString(decryptbyte);
            MessageBox.Show(decrypttext);
        }本来把解密和加密放在一个程序里是可以成功的,但是我把解密拆出来单独做成一个程序,就出问题了.
备注那里老是显示出错....不知什么原因...是否有人试过?

解决方案 »

  1.   

    richTextBox1.Text的值一定是符合加密后的结果吗?
    18位的不一定是身份证号呀
      

  2.   

    加密后的字节数组转换成base64字符
    查msdn
      

  3.   

    解密的时候不会忘了从base64转回数组吧?
    既然能加密出来就应该能解密出来一般加密的时候代价密的数据可能超出长度。改变密钥长度可以稍稍增加点长度可能
      

  4.   

    RSA是非对称加密,效率比较低,一般不会用于加密大数据,像楼主这样加密RichTextBox的内容,建议不要采用非对称加密算法,用对称加密好些,比如DES算法。非对称加密一般用来加密对称加密密钥,而对称加密才用来加密大数据。这样就可以把非对称加密的高度安全性与对称加密的高效率结合起来。
      

  5.   

    回8楼...其实我不是要加密RichTextBox的内容,而是要解密RichTextBox的内容......
      

  6.   

    回7楼,这样算不算已经转回数组了?
                UTF8Encoding enc = new UTF8Encoding();
                string a = Convert.ToBase64String(bytes);
                byte[] decryptbyte = enc.GetBytes(a);
                crypt.FromXmlString(readprivatekey);
                decryptbyte = crypt.Decrypt(decryptbyte, false);bytes这个字节数组就是加密之后的数组.因为我要把加密的结果传给客户,所以想办法把bytes转换成可以保存到记事本里的数据
      

  7.   

    http://blog.csdn.net/llwinnner/archive/2009/03/21/4011936.aspx
      

  8.   

    编码后再加减密试试呢,ans.1标准。
      

  9.   

    明白了,
    Convert.ToBase64String的反向是Convert.FromBase64String