Шифрующая таблица Трисемуса с ключевым словом - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5