哪位高手能帮忙解决一下这个问题
在这个类里面可以加密但解密时就出错误了 temp = rsac.Decrypt(temp,false );(不正确的数据) namespace crypto
{
/// <summary>
/// 非对称RSA
/// </summary>
public class RSA_
{
private RSACryptoServiceProvider rsa;
public RSA_()
{
rsa = new RSACryptoServiceProvider(1024);
}
/// <summary>
/// 得到公钥
/// </summary>
/// <returns></returns>
public string GetPublicKey()
{
return rsa.ToXmlString(false);
}
/// <summary>
/// 得到私钥
/// </summary>
/// <returns></returns>
public string GetPrivateKey()
{
return rsa.ToXmlString(true);
}
///// <summary>
///// 加密
///// </summary>
///// <param name="inFileName">待加密文件路径</param>
///// <param name="outFileName">加密后文件路径</param>
///// <param name="PublicKey">公钥</param>
public void Encrypt(string inFileName, string outFileName)
{
//字节缓冲区定为64(密钥为1024),最大长度为(rsac.KeySize/8 - 11)
byte[] src = new byte[64];
//Encrypt.cs是要加密的文件
FileStream fs = new FileStream(@inFileName , FileMode.Open, FileAccess.Read);
//Result.txt存储的是加密之后的数据
FileStream res = new FileStream(@outFileName , FileMode.Create, FileAccess.Write);
int len;
//加密
while ((len = fs.Read(src, 0, 64)) > 0)
{
byte[] temp = new byte[len];
Array.Copy(src, 0, temp, 0, len);
temp = rsa.Encrypt(temp, false);
res.Write(temp, 0, temp.Length);
}
fs.Close();
res.Close();
//存储密钥到文件,以便解密用。
StreamWriter sw = new StreamWriter("RSA.key");
sw.Write(rsa.ToXmlString(true));
sw.Close();
} /// <summary>
/// 解密
/// </summary>
/// <param name="Source">待解密字符串</param>
/// <param name="PrivateKey">私钥</param>
/// <returns></returns>
public string Decrypt(string Source, string PrivateKey)
{
rsa.FromXmlString(PrivateKey);
byte[] done = rsa.Decrypt(Convert.FromBase64String(Source), false);
return Convert.ToBase64String(done);
}
/// <summary>
/// 解密
/// </summary>
/// <param name="Source">待解密字符数组</param>
/// <param name="PrivateKey">私钥</param>
/// <returns></returns>
public byte[] Decrypt(byte[] Source, string PrivateKey)
{
rsa.FromXmlString(PrivateKey);
return rsa.Decrypt(Source, false);
}
/// <summary>
/// 解密
/// </summary>
/// <param name="inFileName">待解密文件路径</param>
/// <param name="outFileName">解密后文件路径</param>
/// <param name="PrivateKey">私钥</param>
public void Decrypt(string inFileName, string outFileName, string PrivateKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
//读密钥
StreamReader sr = new StreamReader("RSA.key");
String str = sr.ReadToEnd();
sr.Close();
rsac.FromXmlString(str); byte[] src = new byte[64]; FileStream fs = new FileStream(@inFileName , FileMode.Open, FileAccess.Read);
FileStream res = new FileStream(@outFileName , FileMode.Create, FileAccess.Write);
int len;
//解密
while ((len = fs.Read(src, 0,64)) > 0)
{
byte[] temp = new byte[len];
Array.Copy(src, 0, temp, 0, len);
temp = rsa.Decrypt(temp,false );
res.Write(temp, 0, temp.Length);
}
fs.Close();
res.Close(); }
在这个类里面可以加密但解密时就出错误了 temp = rsac.Decrypt(temp,false );(不正确的数据) namespace crypto
{
/// <summary>
/// 非对称RSA
/// </summary>
public class RSA_
{
private RSACryptoServiceProvider rsa;
public RSA_()
{
rsa = new RSACryptoServiceProvider(1024);
}
/// <summary>
/// 得到公钥
/// </summary>
/// <returns></returns>
public string GetPublicKey()
{
return rsa.ToXmlString(false);
}
/// <summary>
/// 得到私钥
/// </summary>
/// <returns></returns>
public string GetPrivateKey()
{
return rsa.ToXmlString(true);
}
///// <summary>
///// 加密
///// </summary>
///// <param name="inFileName">待加密文件路径</param>
///// <param name="outFileName">加密后文件路径</param>
///// <param name="PublicKey">公钥</param>
public void Encrypt(string inFileName, string outFileName)
{
//字节缓冲区定为64(密钥为1024),最大长度为(rsac.KeySize/8 - 11)
byte[] src = new byte[64];
//Encrypt.cs是要加密的文件
FileStream fs = new FileStream(@inFileName , FileMode.Open, FileAccess.Read);
//Result.txt存储的是加密之后的数据
FileStream res = new FileStream(@outFileName , FileMode.Create, FileAccess.Write);
int len;
//加密
while ((len = fs.Read(src, 0, 64)) > 0)
{
byte[] temp = new byte[len];
Array.Copy(src, 0, temp, 0, len);
temp = rsa.Encrypt(temp, false);
res.Write(temp, 0, temp.Length);
}
fs.Close();
res.Close();
//存储密钥到文件,以便解密用。
StreamWriter sw = new StreamWriter("RSA.key");
sw.Write(rsa.ToXmlString(true));
sw.Close();
} /// <summary>
/// 解密
/// </summary>
/// <param name="Source">待解密字符串</param>
/// <param name="PrivateKey">私钥</param>
/// <returns></returns>
public string Decrypt(string Source, string PrivateKey)
{
rsa.FromXmlString(PrivateKey);
byte[] done = rsa.Decrypt(Convert.FromBase64String(Source), false);
return Convert.ToBase64String(done);
}
/// <summary>
/// 解密
/// </summary>
/// <param name="Source">待解密字符数组</param>
/// <param name="PrivateKey">私钥</param>
/// <returns></returns>
public byte[] Decrypt(byte[] Source, string PrivateKey)
{
rsa.FromXmlString(PrivateKey);
return rsa.Decrypt(Source, false);
}
/// <summary>
/// 解密
/// </summary>
/// <param name="inFileName">待解密文件路径</param>
/// <param name="outFileName">解密后文件路径</param>
/// <param name="PrivateKey">私钥</param>
public void Decrypt(string inFileName, string outFileName, string PrivateKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
//读密钥
StreamReader sr = new StreamReader("RSA.key");
String str = sr.ReadToEnd();
sr.Close();
rsac.FromXmlString(str); byte[] src = new byte[64]; FileStream fs = new FileStream(@inFileName , FileMode.Open, FileAccess.Read);
FileStream res = new FileStream(@outFileName , FileMode.Create, FileAccess.Write);
int len;
//解密
while ((len = fs.Read(src, 0,64)) > 0)
{
byte[] temp = new byte[len];
Array.Copy(src, 0, temp, 0, len);
temp = rsa.Decrypt(temp,false );
res.Write(temp, 0, temp.Length);
}
fs.Close();
res.Close(); }
/// <summary>
/// 解密
/// </summary>
/// <param name= "inFileName "> 待解密文件路径 </param>
/// <param name= "outFileName "> 解密后文件路径 </param>
/// <param name= "PrivateKey "> 私钥 </param>
public void Decrypt(string inFileName, string outFileName, string PrivateKey)
{ RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
//读密钥
StreamReader sr = new StreamReader("E:\\RSA.key");
String str = sr.ReadToEnd();
sr.Close();
rsa.FromXmlString(str); byte[] src = new byte[128]; FileStream fs = new FileStream(@inFileName, FileMode.Open, FileAccess.Read);
FileStream res = new FileStream(@outFileName, FileMode.Create, FileAccess.Write);
int len;
//解密
while ((len = fs.Read(src, 0, 128)) > 0)
{
byte[] temp = new byte[len];
Array.Copy(src, 0, temp, 0, len);
temp = rsa.Decrypt(temp, false);
res.Write(temp, 0, temp.Length);
}
fs.Close();
res.Close();
}