//我首先通过得到公钥和私钥,将其保存到静态变量publicKey ,privateKey 中
RSACryptoServiceProvider rs = new RSACryptoServiceProvider();
publicKey = rs.ToXmlString(false);
privateKey = rs.ToXmlString(true);
private RSACryptoServiceProvider rsa;
//这是我的加密算法rsa
public string Encrypt(string cardInfo)
{
try
{
rsa = new RSACryptoServiceProvider(2048);
rsa.FromXmlString(publicKey);
Stream ms = new MemoryStream();
MemoryStream ms1 = new MemoryStream();
byte[] dataToEncrypt = ASCIIEncoding.ASCII.GetBytes(cardInfo);
ms.Write(dataToEncrypt, 0, dataToEncrypt.Length);
byte[] bin = new byte[100];
long rdlen = 0;
long totlen = ms.Length;
int len;
ms.Seek(0, SeekOrigin.Begin);
ms1.Seek(0, SeekOrigin.Begin);
while (rdlen < totlen)
{
len = ms.Read(bin, 0, 100);
byte[] bout = rsa.Encrypt(bin, false);
ms1.Write(bout, 0, bout.Length);
rdlen = rdlen + len;
}
byte[] rsaBuffer = new byte[ms1.Length];
ms1.Seek(0, SeekOrigin.Begin);
ms1.Read(rsaBuffer, 0, rsaBuffer.Length);
ms.Close();
ms1.Close();
string rsastr = Convert.ToBase64String(rsaBuffer);
return rsastr;
}
catch (Exception ex)
{
throw new Exception( ex.Message);
} } //这是解密算法RSA
public string Decrypt(string cardInfo)
{
try
{
rsa = new RSACryptoServiceProvider(2048);
rsa.FromXmlString(privateKey);
Stream ms = new MemoryStream();
MemoryStream ms1 = new MemoryStream();
byte[] dataToEncrypt = Convert.FromBase64String(cardInfo);
ms.Write(dataToEncrypt, 0, dataToEncrypt.Length); byte[] bin = new byte[100];
long rdlen = 0;
long totlen = ms.Length;
int len;
ms.Seek(0, SeekOrigin.Begin);
ms1.Seek(0, SeekOrigin.Begin);
while (rdlen < totlen)
{
len = ms.Read(bin, 0, 100);
byte[] bout = rsa.Decrypt(bin, false); // 不正确的数据。
ms1.Write(bout, 0, bout.Length);
rdlen = rdlen + len;
}
byte[] rsaBuffer = new byte[ms1.Length];
ms1.Seek(0, SeekOrigin.Begin);
ms1.Read(rsaBuffer, 0, rsaBuffer.Length);
ms.Close();
ms1.Close();
string rsastr = Convert.ToBase64String(rsaBuffer);
return rsastr; }
catch (Exception ex)
{
throw new Exception( ex.Message);
}
} 我在加密的时候是能成功的~
但在解密的时候,就会出现问题了 不正确的数据。 小弟是初学者,希望各位高手帮忙改改~
高手支招~
谢谢~
在线 急等~
RSACryptoServiceProvider rs = new RSACryptoServiceProvider();
publicKey = rs.ToXmlString(false);
privateKey = rs.ToXmlString(true);
private RSACryptoServiceProvider rsa;
//这是我的加密算法rsa
public string Encrypt(string cardInfo)
{
try
{
rsa = new RSACryptoServiceProvider(2048);
rsa.FromXmlString(publicKey);
Stream ms = new MemoryStream();
MemoryStream ms1 = new MemoryStream();
byte[] dataToEncrypt = ASCIIEncoding.ASCII.GetBytes(cardInfo);
ms.Write(dataToEncrypt, 0, dataToEncrypt.Length);
byte[] bin = new byte[100];
long rdlen = 0;
long totlen = ms.Length;
int len;
ms.Seek(0, SeekOrigin.Begin);
ms1.Seek(0, SeekOrigin.Begin);
while (rdlen < totlen)
{
len = ms.Read(bin, 0, 100);
byte[] bout = rsa.Encrypt(bin, false);
ms1.Write(bout, 0, bout.Length);
rdlen = rdlen + len;
}
byte[] rsaBuffer = new byte[ms1.Length];
ms1.Seek(0, SeekOrigin.Begin);
ms1.Read(rsaBuffer, 0, rsaBuffer.Length);
ms.Close();
ms1.Close();
string rsastr = Convert.ToBase64String(rsaBuffer);
return rsastr;
}
catch (Exception ex)
{
throw new Exception( ex.Message);
} } //这是解密算法RSA
public string Decrypt(string cardInfo)
{
try
{
rsa = new RSACryptoServiceProvider(2048);
rsa.FromXmlString(privateKey);
Stream ms = new MemoryStream();
MemoryStream ms1 = new MemoryStream();
byte[] dataToEncrypt = Convert.FromBase64String(cardInfo);
ms.Write(dataToEncrypt, 0, dataToEncrypt.Length); byte[] bin = new byte[100];
long rdlen = 0;
long totlen = ms.Length;
int len;
ms.Seek(0, SeekOrigin.Begin);
ms1.Seek(0, SeekOrigin.Begin);
while (rdlen < totlen)
{
len = ms.Read(bin, 0, 100);
byte[] bout = rsa.Decrypt(bin, false); // 不正确的数据。
ms1.Write(bout, 0, bout.Length);
rdlen = rdlen + len;
}
byte[] rsaBuffer = new byte[ms1.Length];
ms1.Seek(0, SeekOrigin.Begin);
ms1.Read(rsaBuffer, 0, rsaBuffer.Length);
ms.Close();
ms1.Close();
string rsastr = Convert.ToBase64String(rsaBuffer);
return rsastr; }
catch (Exception ex)
{
throw new Exception( ex.Message);
}
} 我在加密的时候是能成功的~
但在解密的时候,就会出现问题了 不正确的数据。 小弟是初学者,希望各位高手帮忙改改~
高手支招~
谢谢~
在线 急等~
Decrypt里面100改成128