公钥是从USB Key 中读出 byte[] keyN,keyE;转化成ToBase64String拼成rsa 的公钥XMLstring
<RSAKeyValue>
<Modulus>{0}</Modulus>
<Exponent>{1}</Exponent>
</RSAKeyValue>funtion 1
RSACryptoServiceProvider oRSA2 = new RSACryptoServiceProvider();
oRSA2.FromXmlString(strM);
byte[] AInput = oRSA2.Decrypt(data1, false);
string reslut = Encoding.Default.GetString(AInput);执行解密报错的时候 错误:不正确的项。
把false 改成true 错误:对 OAEP 填充进行解码时出错。funtion 2private byte[] DecryptBytes(byte[] dataBytes, BigInteger KeyNum, BigInteger nNum)
{
int len = dataBytes.Length;
int len1 = 0;
int blockLen = 0;
if (len % 128 == 0)
{
len1 = len / 128;
}
else
{
len1 = len / 128 + 1;
}
List<byte> tempbytes = new List<byte>();
for (int i = 0; i < len1; i++)
{
if (len >= 128)
{
blockLen = 128;
}
else
{
blockLen = len;
}
byte[] oText = new byte[blockLen];
Array.Copy(dataBytes, i * 128, oText, 0, blockLen);
BigInteger biText = new BigInteger(oText);
BigInteger biEnText = biText.modPow(KeyNum, nNum);
byte[] testbyte = biEnText.getBytes();
string str = Encoding.Default.GetString(testbyte);
tempbytes.AddRange(testbyte);
len -= blockLen;
}
return tempbytes.ToArray();
//return System.Text.Encoding.UTF8.GetString(tempbytes.ToArray());
}用网上找到这种方式解密不对。
<RSAKeyValue>
<Modulus>{0}</Modulus>
<Exponent>{1}</Exponent>
</RSAKeyValue>funtion 1
RSACryptoServiceProvider oRSA2 = new RSACryptoServiceProvider();
oRSA2.FromXmlString(strM);
byte[] AInput = oRSA2.Decrypt(data1, false);
string reslut = Encoding.Default.GetString(AInput);执行解密报错的时候 错误:不正确的项。
把false 改成true 错误:对 OAEP 填充进行解码时出错。funtion 2private byte[] DecryptBytes(byte[] dataBytes, BigInteger KeyNum, BigInteger nNum)
{
int len = dataBytes.Length;
int len1 = 0;
int blockLen = 0;
if (len % 128 == 0)
{
len1 = len / 128;
}
else
{
len1 = len / 128 + 1;
}
List<byte> tempbytes = new List<byte>();
for (int i = 0; i < len1; i++)
{
if (len >= 128)
{
blockLen = 128;
}
else
{
blockLen = len;
}
byte[] oText = new byte[blockLen];
Array.Copy(dataBytes, i * 128, oText, 0, blockLen);
BigInteger biText = new BigInteger(oText);
BigInteger biEnText = biText.modPow(KeyNum, nNum);
byte[] testbyte = biEnText.getBytes();
string str = Encoding.Default.GetString(testbyte);
tempbytes.AddRange(testbyte);
len -= blockLen;
}
return tempbytes.ToArray();
//return System.Text.Encoding.UTF8.GetString(tempbytes.ToArray());
}用网上找到这种方式解密不对。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货