C# Индекс ошибки находился за пределами массива (Visual Studio, Winform,. NET Framework 4.6) - PullRequest
0 голосов
/ 30 января 2020

У меня есть программа, которая генерирует ключ, но я всегда получаю исключение «Индекс был за пределами массива».

Мой код такой:

   private string generate()
        {
            try
            {
                int block = 11;
                int size = 0;
                string content = "zQzhPeWFXZG53N2tGTGlvmQzTm9UTU91NG9DNndySERrOEsveFpMQ3ExUGlo"; //this key gets normally decrypted with aes but that is not the problem

                block = Convert.ToInt32(content.Split(':')[2]);
                size = Convert.ToInt32(content.Split(':')[1]);
                content = content.Split(':')[0];

                Random r = new Random();
                char[] blocked = new char[block];

                for (int i = 0; i < block; i++)
                {
                    blocked[i] = content[r.Next(content.Length)];
                }

                string key = "";
                while (this.getValue(key, content, blocked) <= (size - (content.Length)))
                {
                    key += content[r.Next(content.Length)];
                }
                key += content[size - this.getValue(key, content, blocked)];

                key = new string(blocked) + key;
                return key;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

Я думаю ошибка в for или в то время как l oop но странная вещь на нем, на моем p c это работает, но на моих друзьях p c это не работает, и я попробовал все, но я не знаете, как я могу исправить эту ошибку.

Кто-нибудь знает какие-либо исправления для этого?

1 Ответ

0 голосов
/ 30 января 2020

Что ж, похоже, вы разделяете неправильный символ для заданной строки content. Вы можете проверить эту скрипку: https://dotnetfiddle.net/Ubklbk

С вашей исходной строкой:

using System;

public class Program
{
    public static void Main()
    {
                int block = 11;
                int size = 0;
                //string content = "zQzhPeWFXZG:5:3:2tGTGlvmQzTm9UTU91NG9DNndySERrOEsveFpMQ3ExUGlo"; //this key gets normally decrypted with aes but that is not the problem
                string content = "zQzhPeWFXZG532tGTGlvmQzTm9UTU91NG9DNndySERrOEsveFpMQ3ExUGlo"; //this key gets normally decrypted with aes but that is not the problem
                string[] split =content.Split(':');
                foreach(var item in split)
                {
                    Console.WriteLine(item);
                }
                block = Convert.ToInt32(content.Split(':')[2]);
                size = Convert.ToInt32(content.Split(':')[1]);
                content = content.Split(':')[0];
                Console.WriteLine(block);
                Console.WriteLine(size);
                Console.WriteLine(content);
    }
}

Выход:

zQzhPeWFXZG532tGTGlvmQzTm9UTU91NG9DNndySERrOEsveFpMQ3ExUGlo
Run-time exception (line 16): Index was outside the bounds of the array.

Stack Trace:

[System.IndexOutOfRangeException: Index was outside the bounds of the array.]
   at Program.Main() :line 16

В следующем запустил, я добавил : разделитель в точках, которые возвращали мне ваши типы полей, что дало мне следующий вывод:

zQzhPeWFXZG
5
3
2tGTGlvmQzTm9UTU91NG9DNndySERrOEsveFpMQ3ExUGlo
3
5
zQzhPeWFXZG

Итак, в основном, проблема заключается в том, как вы разбиваете исходную строку с помощью : разделитель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...