ЛР / laba_java(2)
.docxФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
Факультет информационных систем и технологий
Кафедра безопасности информационных систем
ОТЧЕТ
по практике №2
по дисциплине «Кросс-платформенное программирование»,
по теме: «Разработка Java-приложения с использованием простых типов данных и символьных строк».
|
Выполнили студенты группы ИСТ-223: Хакова Ю. М. Коваленко А. А.
|
|
|
|
|
|
Принял: Бородянский Ю. М. |
|
|
(подпись) |
|
|
|
|
|
|
|
Цель работы :
Разработать, отладить и выполнить Java-программу в соответствии с приведенными заданиями.
Задание 1. Произвести шифрование методом замены (циклического сдвига) букв произвольного текста, обеспечив ввод с клавиатуры величины сдвига.
Задание 2. Используя операцию «исключающее ИЛИ», произвести побитовое шифрование текста длиной не менее двух строк стандартного листа А4. Ключ – слово СЕКРЕТ. Вывести на экран исходный, зашифро-ванный и расшифрованный тексты.
Задание 3. Разработать текстовое меню для управления методами шифрования, реализованными в программе.
Ход работы:
Задание 1:
Рис. 1. Отображение меню в консоли. Шифрование и расшифровка текста циклическим сдвигом (шифром Цезаря).
Задание 2
Рис. 2. Побитовое шифрование и расшифровка текста операцией «исключающее ИЛИ».
Вывод:
Практическое применение данного кода может реализовываться в таких сферах как:
Защита данных: Криптография используется для обеспечения конфиденциальности данных. Например, при передаче личных сообщений через интернет или хранении файлов на компьютере.
Безопасность в сетях: Шифрование обеспечивает защиту данных при передаче через сети, такие как интернет или корпоративные сети.
Приложение 1.
Листинг кода:
import java.util.Scanner;
public class lab2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int choice;
do {
System.out.println("1.шифрование и расшифрование циклического сдвига (шифр Цезаря)");
System.out.println("2.побитовое шифрование текста операцией «исключающее ИЛИ»");
System.out.println("3.выход");
System.out.println("выберите опцию: ");
choice = scanner.nextInt();
if (choice == 1) {
CaesaresEncryption();
} else if (choice == 2) {
ByteCipher();
} else if (choice == 3) {
System.out.println("выход из программы.");
} else {
System.out.println("неверный выбор");
}
} while (choice != 3);
}
public static void CaesaresEncryption() {
Scanner scanner = new Scanner(System.in);
System.out.println("текст для шифрования: ");
String text = scanner.nextLine();
System.out.println("величина сдвига:");
int key = scanner.nextInt();
char[] simvolE = new char[text.length()];
for (int i = 0; i < text.length(); i++) {
if (Character.isLetter(text.charAt(i)))
simvolE[i] = (char) ((((((int) (text.charAt(i))) - 1072) + key) % 33) + 1072);
else
simvolE[i] = text.charAt(i);
}
System.out.println("зашифрованный текст:");
System.out.println(simvolE);
char[] simvolD = new char[simvolE.length];
for (int i = 0; i < simvolE.length; i++) {
if (Character.isLetter(simvolE[i])) {
int decryptionChar = ((((simvolE[i]) - 'а') - key) % 33);
if (decryptionChar < 0) {
decryptionChar += 33;
simvolD[i] = (char) (decryptionChar + 'а');
} else if (decryptionChar >= 0) {
simvolD[i] = (char) (decryptionChar + 'а');
}
}
else {
simvolD[i] = simvolE[i];
}
}
System.out.println("расшифрованный текст:");
System.out.println(simvolD);
}
public static void ByteCipher() {
Scanner scanner = new Scanner(System.in);
System.out.println("текст для шифрования: ");
String text = scanner.nextLine();
System.out.println("ключ:");
String key = scanner.nextLine();
key = KeyLength(key, text.length());
System.out.println("текст для шифрования: " + text);
String encryptedText = DoCipher(text, key);
System.out.println("зашифрованный текст: " + encryptedText);
String decryptedText = DoCipher(encryptedText, key);
System.out.println("расшифрованный текст: " + decryptedText);
}
public static String KeyLength(String key, int length) {
StringBuilder NewKey = new StringBuilder(key);
while (NewKey.length() < length) {
NewKey.append(key);
}
return NewKey.substring(0, length);
}
public static String DoCipher(String text, String key) {
StringBuilder result = new StringBuilder();
String alphabet = "абвгдежзиклмнопрстуфхцчшщъыьэюя ";
for (int i = 0; i < text.length(); i++) {
int textIndex = alphabet.indexOf(text.charAt(i));
int keyIndex = alphabet.indexOf(key.charAt(i));
int cipherIndex = (textIndex ^ keyIndex) % alphabet.length();
result.append(alphabet.charAt(cipherIndex));
}
return result.toString();
}
}
Санкт-Петербург, 2024
