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);
}本来把解密和加密放在一个程序里是可以成功的,但是我把解密拆出来单独做成一个程序,就出问题了.
备注那里老是显示出错....不知什么原因...是否有人试过?
18位的不一定是身份证号呀
查msdn
既然能加密出来就应该能解密出来一般加密的时候代价密的数据可能超出长度。改变密钥长度可以稍稍增加点长度可能
UTF8Encoding enc = new UTF8Encoding();
string a = Convert.ToBase64String(bytes);
byte[] decryptbyte = enc.GetBytes(a);
crypt.FromXmlString(readprivatekey);
decryptbyte = crypt.Decrypt(decryptbyte, false);bytes这个字节数组就是加密之后的数组.因为我要把加密的结果传给客户,所以想办法把bytes转换成可以保存到记事本里的数据
Convert.ToBase64String的反向是Convert.FromBase64String