生成密钥对:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
secKey = rsa.ToXmlString(true);
pubKey = rsa.ToXmlString(false);
string strPubKeyName = "PubKey.xml";
string strSecKeyName = "SecKey.xml";
string strSecKeyPath = System.Configuration.ConfigurationSettings.AppSettings["KeyPath"].Trim();
string strPubKeyPath = strSecKeyPath;
if(!Directory.Exists(strSecKeyPath))
{
Directory.CreateDirectory(strSecKeyPath);
}
if(!Directory.Exists(strPubKeyPath))
{
Directory.CreateDirectory(strPubKeyPath);
}
strSecKeyPath += strSecKeyName;
strPubKeyPath += strPubKeyName;
StreamWriter writer=new StreamWriter(strSecKeyPath);
string PPKeyXml=secKey;//保存私钥
writer.Write(PPKeyXml);
writer.Close();
writer=new StreamWriter(strPubKeyPath);
string PKeyXml=pubKey;//保存公钥
writer.Write(PKeyXml);
writer.Close();用私钥加密:
public string Encrypt(string txtUserInfo)
{

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(secKey); 
// 加密对象 
RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa); 
f.SetHashAlgorithm("SHA1"); 
byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(txtUserInfo); 
SHA1Managed sha = new SHA1Managed(); 
byte[] result = sha.ComputeHash(source); 
 
byte[] b = f.CreateSignature(result); 
string resultString = Convert.ToBase64String(b).ToString(); StreamWriter writer=new StreamWriter(@"d:\macrowing\key\EncryptUserCode.xml");
string PPKeyXml=resultString;//保存加密后的用户输入
writer.Write(PPKeyXml);
writer.Close();
return resultString; 
}

解决方案 »

  1.   

    客户解密方法:
    private string Decrypt(bool doOAEPPadding)
    {   doOAEPPadding = true;
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    StreamReader reader=new StreamReader(@"d:\macrowing\key\PubKey.xml");
    string PKey=reader.ReadToEnd();

    rsa.FromXmlString(PKey);
    reader.Close();
                reader = new StreamReader(@"d:\macrowing\key\EncryptUserCode.xml");
    string dataToDecrypt = reader.ReadToEnd();
    RSAPKCS1SignatureDeformatter f = new RSAPKCS1SignatureDeformatter(rsa); 
    reader.Close(); f.SetHashAlgorithm("SHA1");  byte[] key = Convert.FromBase64String(PKey);  SHA1Managed sha = new SHA1Managed(); 
    byte[] name = sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(dataToDecrypt)); 
    return name.ToString();
    }这个报错:
    failed: Base-64 字符串中的无效字符。
    System.FormatException: Base-64 字符串中的无效字符。
    at System.Convert.FromBase64String(String s)
      

  2.   

    byte[] key = Convert.FromBase64String(PKey); 上面那句有用吗?? key 你在后面也没有用,为什么要写啊 !!你的私钥已经读进去了,在RSA中,还要转它做什么??