Перестановочный шифр, исправить код - C#
Формулировка задачи:
Задание : В перестановочных шифрах меняется порядок следования символов. В простом перестановочном шифре в качестве ключа выбирается перестановка чисел от 0 до n. Например, для n=7 можно использовать перестановку 3,2,5,7,4,6,1. Далее текст записывается в n столбцов, которые затем переставляются в соответствии с порядком задаваемым перестановкой. Ниже приведён пример:
как вид
но, сов
ершенст .......
Зашифрованный вид :
даквки
вонс,о
треншсе .........
Т.о. получем шифртекст: "даквки вонс,о треншсетово сдягитасегн тео гадк,о адж еу енгчое ирпаивб ьтн,о уокаг деежи чньоге лняязт но ьтд е(кес-нэт)юзрпие". Расшифрование осуществляется тем же самым образом, но используется другой ключ. Чтобы получить ключ расшифрования нужно зашифровать строку "1234567"; при этом мы получим "7215364".
вот код
Выдает ошибку Индекс и длина должны указывать на позицию в строке.
Имя параметра: length
в строке msgInArray[i] = msg.Substring(i * key.Length, key.Length);
Помогите додумать дальше,пожалуйста!как исправить ошибку?
public string Encrypt(string msg, char[] key) { string result = string.Empty; string[] msgInArray = new string[(msg.Length / key.Length) + 1]; for (int i = 0; i < (msg.Length / key.Length) + 1; i++) { if (msg.Length <= key.Length) { msgInArray[i] = msg; break; } else { msgInArray[i] = msg.Substring(i * key.Length, key.Length); } } int[] a = new int[key.Length]; for (int i = 0; i < a.Length; i++) { a[i] = key[i]-48; } List<char> msgl = new List<char>(); for (int i = 0; i < msgInArray.Length; i++) { if (msgInArray[i] != null) { msgl = msgInArray[i].ToList<char>(); for (int j = 0; j < key.Length; j++) { result += msgl[a[j]]; } msgl.Clear(); } else { break; } } return result; } private void button1_Click(object sender, EventArgs e) { MessageBox.Show(Encrypt(textBox1.Text, textBox2.Text.ToCharArray())); }
Решение задачи: «Перестановочный шифр, исправить код»
textual
Листинг программы
public static string Encrypt(string msg, char[] key) { string result = string.Empty; string[] msgInArray = new string[(msg.Length / key.Length) + 1]; for (int i = 0; i < (msg.Length / key.Length) + 1; i++) { if (msg.Length <= key.Length) { msgInArray[i] = msg; break; } else { if((msg.Length-i*key.Length)>key.Length) msgInArray[i] = msg.Substring(i * key.Length, key.Length); else msgInArray[i] = msg.Substring(i * key.Length, msg.Length - i * key.Length); } } int[] a = new int[key.Length]; for (int i = 0; i < a.Length; i++) { a[i] = key[i] - 48; } List<char> msgl = new List<char>(); for (int i = 0; i < msgInArray.Length; i++) { if (msgInArray[i] != null) { msgl = msgInArray[i].ToList<char>(); if (msgl.Count==key.Length) { for (int j = 0; j < key.Length; j++) result += msgl[a[j]]; msgl.Clear(); } else { for (int j = 0; j< msgl.Count; j++) result += msgl[j]; msgl.Clear(); } } else { break; } } return result; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д