递归调用RSA加密以加密长度超过128字节的字符串

时间:2016-04-08 19:28:27

标签: c# encryption rsa

所以我正在开展一项作业,旨在教会我们加密和解密邮件的方法。

我创建了一个简单的应用程序,它将从一个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的限制,但我似乎无法弄清楚究竟是怎么做的。

0 个答案:

没有答案