在后续IF块中解密长度时初始化阵列

时间:2016-04-07 16:21:48

标签: c# arrays encryption scope

我目前有一种方法,我试图用字节数组做一些事情。但是,此字节数组的长度取决于方法的参数。我需要在if-else块之前声明数组,而不是在它们中,否则变量超出范围。

该方法的一个例子如下:

private static byte[] messageFormatting(string bodyText, byte packetType)
{
    int index = 0;
    byte[] messageBody;

    if(packetType == 0x03)
    {
        byte[] RSAEncryptedMessageBody = RSAEncrypt(bodyText);
        messageBody = new byte[(RSAEncryptedMessageBody.Length)];
        Array.Copy(RSAEncryptedMessageBody, messageBody, RSAEncryptedMessageBody.Length);
    }

    else
    {
        messageBody = System.Text.Encoding.ASCII.GetBytes(bodyText);
    }

    byte[] fullMessage = new byte[(messageBody.Length + 6)];

    //do others things

}

执行方法时出现异常错误,因为我无法将对象引用设置为对象的实例。

我认为这意味着当我在之前的messageBody = new byte[]中进行空白初始化时,我无法byte[] messageBody。{I}但是,如果我删除此声明,if-else块下面的引用超出范围。在加密发生之前,我不知道messageBody的长度。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我猜你的错误就在这里:

byte[] RSAEncryptedMessageBody = RSAEncrypt(bodyText);
messageBody = new byte[(RSAEncryptedMessageBody.Length)];

RSAEncrypredMessageBody可能为null。你的RSAEncrypt功能在做什么?