Автор работы: Пользователь скрыл имя, 14 Мая 2013 в 20:32, лабораторная работа
Задание: Написать программу, для кодирования текста шифром Плейфера.,
Вывод: В ходе выполнения данной лабораторной работы я ознакомился с шифром Плейфера.
Лабораторная робота №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(
abc = abc.replaceAll(String.valueOf(
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\
bigramsGen(shifr);
decode();
System.out.printf("
}
public static void main(String[] args) {
DS4 ds = new DS4();
ds.run();
}
}
Результаты:
Вывод:
В ходе выполнения данной лабораторной работы я ознакомился с шифром Плейфера.