Скачиваний:
0
Добавлен:
07.06.2026
Размер:
213 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

Факультет информационных систем и технологий

Кафедра безопасности информационных систем

ОТЧЕТ

по практике №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

Соседние файлы в папке ЛР