所以我正在开展一项作业,旨在教会我们加密和解密邮件的方法。
我创建了一个简单的应用程序,它将从一个textBox中获取文本,然后在单击按钮上将加密的字节重新复制到另一个textBox中。还有另一个按钮,按下时将获取加密的字节数组,并解密它。
一切正常,但如果要加密的消息大于128个字节,则会引发错误。有意义,因为RSA密钥大小是128.所以我正在编写一些代码来处理字节数组超过128的情况。
到目前为止,这是我提出的:
//Encode the data to encrypt as a byte array
var dataToEncrypt = encoder.GetBytes(txtPlain.Text);
//store dataLength
int dataLength = dataToEncrypt.Length;
//Check if dataLength > 128
if(dataLength > 128)
{
//Divide dataLength by 128 to determine how many cycles will be needed
double numOfCycles = (dataLength / 128);
//round up to nearest whole number
cycles = (int) Math.Ceiling(numOfCycles);
}
//for however many cycles
for (int i = 0; i < cycles; i++)
{
var myByteArray = new byte[128];
for (int j = 0; j < 128; j++)
{
int currentByte = i * 128 + j;
myByteArray[j] = dataToEncrypt[currentByte];
}
var encryptedByteArray = myRSA.Encrypt(myByteArray, false).ToArray();
var length = encryptedByteArray.Count();
var item = 0;
var sb = new StringBuilder();
//Change each byte in the encrypted byte array to text
foreach (var x in encryptedByteArray)
{
item++;
sb.Append(x);
if (item < length) sb.Append(",");
}
txtCypher.Text = sb.ToString();
}
我试图计算需要多少个周期(一次加密128个字节),然后重复这个加密128个字节的字节数组并打印出来的过程。
但是我仍然收到错误An unhandled exception of type 'System.Security.Cryptography.CryptographicException' occurred in mscorlib.dll
Additional information: Bad Length.
来自:var encryptedByteArray = myRSA.Encrypt(myByteArray, false).ToArray();
看来我的字节数组超过了128的限制,但我似乎无法弄清楚究竟是怎么做的。