Шифрующая таблица Трисемуса с ключевым словом - C#
Формулировка задачи:
Всем привет.Есть программа для шифрования/дешифрования, но не могу сделать что бы шифровалось по ключевом слове. Буду рад любой помощи.
Листинг программы
- namespace WindowsFormsApplication1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- if (openFileDialog1.ShowDialog() == DialogResult.OK)
- {
- StreamReader sr = new StreamReader(openFileDialog1.FileName);
- textBox1.Text = sr.ReadToEnd();
- sr.Close();
- }
- }
- private void pictureBox1_Click(object sender, EventArgs e)
- {
- }
- private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
- {
- }
- private void выходToolStripMenuItem_Click(object sender, EventArgs e)
- {
- Application.Exit();
- }
- private void button3_Click(object sender, EventArgs e)
- {
- string Ex2 = textBox2.Text;
- int cols1 = (int)Math.Ceiling(Math.Sqrt(Ex2.Length));
- int rows1 = (int)Math.Ceiling(Ex2.Length / (double)cols1);
- dataGridView2.RowCount = rows1;
- dataGridView2.ColumnCount = cols1;
- for (int j = 0; j < rows1; j++)
- for (int i = 0; i < cols1; i++)
- if (Ex2.Length > j * cols1 + i) dataGridView2[i, j].Value = Ex2[j * cols1 + i];
- else dataGridView1[i, j].Value = '+';
- StringBuilder sb1 = new StringBuilder();
- for (int i = 0; i < cols1; i++)
- for (int j = 0; j < rows1; j++)
- sb1.Append(dataGridView2[i, j].Value.ToString());
- string str1 = sb1.ToString();
- string str = "";
- for (int i = 0; i < str1.Length; i++)
- {
- if (char.IsLetter(str1[i])) str = str + str1[i];
- else
- {
- str = str;
- }
- }
- textBox3.Text = str;
- }
- private void button2_Click(object sender, EventArgs e)
- {
- string s = textBox1.Text;
- int cols = (int)Math.Ceiling(Math.Sqrt(s.Length));
- int rows = (int)Math.Ceiling(s.Length / (double)cols);
- dataGridView1.RowCount = rows;
- dataGridView1.ColumnCount = cols;
- for (int i = 0; i < cols; i++)
- for (int j = 0; j < rows; j++)
- if (s.Length > i * rows + j) dataGridView1[i, j].Value = s[i * rows + j];
- else dataGridView1[i, j].Value = '+';
- StringBuilder sb = new StringBuilder();
- for (int j = 0; j < rows; j++)
- for (int i = 0; i < cols; i++)
- sb.Append(dataGridView1[i, j].Value.ToString());
- textBox2.Text = sb.ToString();
- }
- }
Решение задачи: «Шифрующая таблица Трисемуса с ключевым словом»
textual
Листинг программы
- # -*- coding: utf-8 -*-
- # autor: maksim32
- # task: Реализация шифрующей таблицы Трисемуса
- # date: 2017-09-10
- import sys
- g_alphabet = u"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ."
- def Trisemus(key, strval, action):
- keyword, (height, width) = key
- isEncode = True if action == "encode" else False
- isDecode = True if action == "decode" else False
- # построение таблицы
- pos = 0
- table = [['.' for x in xrange(width)] for y in xrange(height)]
- hchars = {}
- for i in keyword + g_alphabet:
- if hchars.get(i) == None:
- hchars[i] = pos
- table[pos / width][pos % width] = i
- pos += 1
- if pos >= width * height:
- break
- #print '\n'.join(' '.join(j for j in table[i]) for i in range(len(table))) # debug: output table
- result = ""
- for i in strval:
- pos = hchars.get(i)
- if pos != None:
- x = pos % width
- if isEncode:
- y = (pos / width + 1) % height
- elif isDecode:
- y = (pos / width - 1 + height) % height
- else:
- y = pos / width % height # do nothing
- result += table[y][x]
- else: # далее нужно выбрать одно из действий с символами, отсутсвующими в таблице:
- result += i # оставить неизменными
- #result += "" # удалить
- #result += table[height - 1][width - 1] # заменять на определённый
- return result
- # end def
- keyword = u"ПРЕФЕКТУРА"
- tablesize = (5, 7)
- key = (keyword, tablesize)
- print "key = " + str(key)
- inputstr = unicode(raw_input("Text to encode: "), sys.stdout.encoding)
- inputstr = u"АББАТ ТРИСЕМУС, ТАБЛИЦА." if inputstr == "" else inputstr # default
- print inputstr
- s = Trisemus(key, inputstr, "encode")
- print s
- s = Trisemus(key, s, "decode")
- print s
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д