Симметричное шифрование

Автор работы: Пользователь скрыл имя, 14 Мая 2013 в 20:32, лабораторная работа

Краткое описание

Задание: Написать программу, для кодирования текста шифром Плейфера.,
Вывод: В ходе выполнения данной лабораторной работы я ознакомился с шифром Плейфера.

Вложенные файлы: 1 файл

Без. Д. 4.doc

— 79.00 Кб (Скачать файл)


 

Лабораторная робота №4

Симметричное  шифрование

 

Задание:

 

Написать программу, для кодирования  текста шифром Плейфера.


 

Текст программы:

 

package ds4;

import java.util.Scanner;

public class DS4 {

    private char[][] bigram;

    private char[][] key;

    private int x, y, x1, x2, y1, y2;

    private String shifr = "";

    private String text = "";

 

    public void bigramsGen(String t) {

        t = t.toLowerCase();

        String p = "";

        for (int i = 0; i < t.length(); i++) {

            if (i % 2 != 0 && t.charAt(i - 1) == t.charAt(i)) {

                p += '&';

            }

            p += t.charAt(i);

        }

        if (p.length() % 2 == 1) {

            p += '&';

        }

        bigram = new char[p.length() / 2][2];

        for (int i = 0; i < p.length(); i += 2) {

            bigram[i / 2][0] = p.charAt(i);

            bigram[i / 2][1] = p.charAt(i + 1);

        }

    }

 

    private void encode() {

        shifr = "";

        int t;

        for (int i = 0; i < bigram.length; i++) {

            getPos(key, bigram[i][0]);

            x1 = getX();

            y1 = getY();

            getPos(key, bigram[i][1]);

            x2 = getX();

            y2 = getY();

            if (x1 == x2) {

                t = y1;

                y1 = (y2 + 1) % 5;

                y2 = (t + 1) % 5;

            } else if (y1 == y2) {

                t = x1;

                x1 = (x2 + 1) % 6;

                x2 = (t + 1) % 6;

            } else {

                t = y1;

                y1 = y2;

                y2 = t;

            }

            shifr = shifr + key[x1][y1] + key[x2][y2];

        }

    }


 

    private void decode() {

        shifr = "";

        int t;

        for (int i = 0; i < bigram.length; i++) {

            getPos(key, bigram[i][0]);

           x1 = getX();

            y1 = getY();

            getPos(key, bigram[i][1]);

            x2 = getX();

            y2 = getY();

            if (x1 == x2) {

                t = y1;

                y1 = (y2 - 1 + 5) % 5;

                y2 = (t - 1 + 5) % 5;

            } else if (y1 == y2) {

                t = x1;

                x1 = (x2 - 1 + 6) % 6;

                x2 = (t - 1 + 6) % 6;

            } else {

                t = y1;

                y1 = y2;

                y2 = t;

            }

           shifr = shifr + key[x1][y1] + key[x2][y2];

        }

 shifr=shifr.replaceAll("&", "");

    }

 

    private void keyGen(String s) {

        String abc = "abcdefghijklmnopqrstuvwxyz .,-";

        String keyStr = "";

        for (int i = 0; i < s.length(); i++) {

            if (abc.contains(String.valueOf(s.charAt(i)))) {

                abc = abc.replaceAll(String.valueOf(s.charAt(i)), "");

                keyStr += s.charAt(i);

            }

        }

        keyStr += abc;

        key = new char[6][5];

        for (int i = 0, k = 0; i < 6; i++) {

            for (int j = 0; j < 5; j++) {

                key[i][j] = keyStr.charAt(k++);

                System.out.printf("%c ", key[i][j]);

            }

            System.out.printf("\n");

        }

    }

 

   private void getPos(char[][] arr, char c) {

        for (int i = 0; i < 6; i++) {

            for (int j = 0; j < 5; j++) {

                if (arr[i][j] == c) {

                    setX(i);

                    setY(j);

                    break;

                }

            }

        }

    }

 

    public int getX() {

        return x;

    }

 

    public void setX(int x) {


        this.x = x;

    }

 

    public int getY() {

        return y;

    }

 

    public void setY(int y) {

        this.y = y;

    }

 

    private void run() {

        Scanner scan = new Scanner(System.in);

        System.out.println("Введите ключ: ");

        text = scan.nextLine();

        System.out.println("Ключ-матрица: ");

        keyGen(text);

        System.out.println("Введите текст: ");

        text = scan.nextLine();

        bigramsGen(text);

        encode();

        System.out.printf("Шифр:\n%s\n",shifr);

        bigramsGen(shifr);

        decode();

        System.out.printf("Расшифровка:\n%s\n",shifr);

    }

 

    public static void main(String[] args) {

        DS4 ds = new DS4();

        ds.run();

    }

}

 


Результаты:

 

 

Вывод:

 

В ходе выполнения данной лабораторной работы я ознакомился с шифром Плейфера.

 


Информация о работе Симметричное шифрование