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

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Проектування засобів захисту інформації в комп’ютерних мережах

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки Національний університет „Львівська політехніка” Кафедра ЕОМ  Лабораторна робота №4 з дисципліни: “Проектування засобів захисту інформації в комп'ютерних системах та мережах” на тему: “Комбіновані криптосистеми на прикладі цифрового конверта” Львів 2017 Мета. Реалізувати програму підтримки комбінованих криптосистем на прикладі цифрового конверта. Теоретичні відомості. Сьогодні можна сміливо вважати, що якщо мова йде про передачу даних, то мається на увазі передача даних в комп'ютерних мережах або між локальними комп'ютерами. Тут в якості абонентського комплекту буде виступати комп'ютер, який будь-яким чином (безпосередньо через комп'ютерну мережу, через модем і стаціонарну телефонну мережу або через мобільний телефон) підключений до іншого комп'ютера (в разі широкомовних повідомлень - до інших комп'ютерів). Разом із завданням безпосереднього забезпечення захисту вмісту повідомлення від несанкціонованого доступу при передачі даних виникає задача підтвердження автентичності переданого повідомлення. Як для індивідуального, так і для корпоративного користувача найбільш прийнятні технології цифрового конверта і цифрового підпису у програмній реалізації. Суть технології цифрового конверта в наступному. Генерується унікальне число –сеансовий ключ. Упаковуння документа в цифровій конверт здійснюється шляхом обробки за певним алгоритмом, на вхід якого подаються як сам документ, так і сеансовий ключ. Вилучення документа з конверта можливо тільки при знанні сеансового ключ. Надалі технологія використання цифрового конверта визначається технологією керування сеансовоми ключами. Завдання. В ході роботи необхідно засвоїти основні принципи побудови комбінованих криптосистем, розробити програму підтримки комбінованих криптосистем на прикладі цифрового конверта. Для спрощення реалізації розрядність відкритого та закритого ключів повинна складати до 64 біт. Текст програми. package strilets; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigInteger; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea; import javax.swing.SwingConstants; @SuppressWarnings("serial") public class DigEnv extends JFrame implements ActionListener { static String encrTextMes = "", digSign = ""; static BigInteger encrSesKey; static int size; JButton jButtonForm = new JButton("Form"); JButton jButtonVerify = new JButton("Verify"); JButton jButtonClear = new JButton("Reset"); JLabel jLabel1, jLabel2, jLabel3, jLabel4, jLabel5; static JLabel jLabel6; JLabel jLabel7; static JTextArea jTextMessage, jEncKey, jEncMes, jDigSig; @SuppressWarnings("deprecation") public DigEnv() { super("Digital envelope"); setSize(1070, 630); Container cc = getContentPane(); cc.setBackground(Color.green); jLabel1 = new JLabel("Digital envelope", SwingConstants.CENTER); jLabel1.setForeground(Color.BLACK); jLabel1.setFont(new Font("Arial", Font.PLAIN, 30)); jLabel1.setBounds(285, 15, 500, 50); cc.add(jLabel1); jLabel2 = new JLabel("Message"); jLabel2.setForeground(Color.BLACK); jLabel2.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel2.setBounds(30, 60, 500, 50); cc.add(jLabel2); jTextMessage = new JTextArea(10, 50); jTextMessage.setLineWrap(true); jTextMessage.setBounds(30, 100, 1000, 25); jTextMessage.setFont(new Font("Arial", Font.PLAIN, 20)); cc.add(jTextMessage); jLabel3 = new JLabel("Encrypted session key"); jLabel3.setForeground(Color.BLACK); jLabel3.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel3.setBounds(30, 115, 500, 50); cc.add(jLabel3); jEncKey = new JTextArea(10, 50); jEncKey.setLineWrap(true); jEncKey.setBounds(30, 155, 1000, 100); jEncKey.setFont(new Font("Arial", Font.PLAIN, 20)); cc.add(jEncKey); jLabel4 = new JLabel("Encrypted text message"); jLabel4.setForeground(Color.BLACK); jLabel4.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel4.setBounds(30, 245, 500, 50); cc.add(jLabel4); jEncMes = new JTextArea(10, 50); jEncMes.setLineWrap(true); jEncMes.setBounds(30, 285, 1000, 100); jEncMes.setFont(new Font("Arial", Font.PLAIN, 20)); cc.add(jEncMes); jLabel5 = new JLabel("Digital signature"); jLabel5.setForeground(Color.BLACK); jLabel5.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel5.setBounds(30, 375, 500, 50); cc.add(jLabel5); jDigSig = new JTextArea(10, 50); jDigSig.setLineWrap(true); jDigSig.setBounds(30, 415, 1000, 100); jDigSig.setFont(new Font("Arial", Font.PLAIN, 20)); cc.add(jDigSig); jLabel6 = new JLabel(); jLabel6.setForeground(Color.BLACK); jLabel6.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel6.setBounds(30, 505, 500, 50); cc.add(jLabel6); jButtonForm.setBounds(30, 545, 100, 30); cc.add(jButtonForm); jButtonVerify.setBounds(140, 545, 100, 30); cc.add(jButtonVerify); jButtonClear.setBounds(250, 545, 100, 30); cc.add(jButtonClear); jLabel7 = new JLabel(); cc.add(jLabel7); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jButtonForm.addActionListener(this); jButtonVerify.addActionListener(this); jButtonClear.addActionListener(this); show(); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == jButtonForm) { formDigEnv(); } if (e.getSource() == jButtonVerify) { verifyDigEnv(); } if (e.getSource() == jButtonClear) { reset(); } } public static void main(String[] args) { new DigEnv(); } public static void verifyDigEnv() { BigInteger temp1 = new BigInteger(binaryToBigInteger(hexToBinary(digSign))); BigInteger temp2 = RSA.decryptPub(temp1); String hash1 = bigIntegerToHex(temp2); BigInteger temp3 = RSA.decryptPrv(encrSesKey); String sessionKey = bigIntegerToHex(temp3); String temp4 = CAST128.decr(encrTextMes, sessionKey); String openTextMessage = temp4.substring(0, size); String hash2 = SHA1.hash(openTextMessage).toUpperCase().substring(0, 40); System.out.println("Session key:\t" + sessionKey); System.out.println("Hash1:\t" + hash1); System.out.println("Open text message:\t" + openTextMessage); System.out.println("Hash2:\t" + hash2); if (hash1.equals(hash2)) { System.out.println("Check passed."); jLabel6.setText("Checked passed"); } else { System.out.println("Check not passed."); jLabel6.setText("Checked notpassed"); } } public static void formDigEnv() { String message = jTextMessage.getText(); byte[] key = LSFR(); RSA.generateKey(); size = message.length(); String hash = SHA1.hash(message).toUpperCase().substring(0, 40); String temp1 = bigIntegerToHex(new BigInteger(binaryToBigInteger(key))); encrTextMes = CAST128.encr(message, temp1); BigInteger temp2 = new BigInteger(binaryToBigInteger(key)); encrSesKey = RSA.encryptPub(temp2); BigInteger temp3 = new BigInteger(binaryToBigInteger(hexToBinary(hash))); BigInteger temp4 = RSA.encryptPrv(temp3); String temp5 = bigIntegerToHex(encrSesKey); digSign = bigIntegerToHex(temp4); System.out.println("Message:\t" + message); System.out.println("Hash:\t" + hash); System.out.println("Session key:\t" + bigIntegerToHex(new BigInteger(binaryToBigInteger(key)))); System.out.println("Encrypted session key:\t" + temp5); System.out.println("Encrypted text message:\t" + encrTextMes); System.out.println("Digital signature:\t" + digSign); System.out.println( "----------------------------------------------------------------------------------------------------------"); jEncKey.setText(temp5); jEncMes.setText(encrTextMes); jDigSig.setText(digSign); } public static void reset() { jLabel6.setText(""); jTextMessage.setText(""); jEncKey.setText(""); jEncMes.setText(""); jDigSig.setText(""); encrTextMes = ""; digSign = ""; encrSesKey = null; size = 0; } public static String bigIntegerToHex(BigInteger b) { String s = b.toString(10); BigInteger temp = new BigInteger(s, 10); return temp.toString(16).toUpperCase(); } public static byte[] hexToBinary(String s) { byte[] b = new byte[s.length() * 4]; String hex = s.toLowerCase(); for (int i = 0, j = hex.length() - 1; j >= 0; i += 4, j--) { if (hex.charAt(j) == '0') { b[i] = 0; b[i + 1] = 0; b[i + 2] = 0; b[i + 3] = 0; } if (hex.charAt(j) == '1') { b[i] = 1; b[i + 1] = 0; b[i + 2] = 0; b[i + 3] = 0; } if (hex.charAt(j) == '2') { b[i] = 0; b[i + 1] = 1; b[i + 2] = 0; b[i + 3] = 0; } if (hex.charAt(j) == '3') { b[i] = 1; b[i + 1] = 1; b[i + 2] = 0; b[i + 3] = 0; } if (hex.charAt(j) == '4') { b[i] = 0; b[i + 1] = 0; b[i + 2] = 1; b[i + 3] = 0; } if (hex.charAt(j) == '5') { b[i] = 1; b[i + 1] = 0; b[i + 2] = 1; b[i + 3] = 0; } if (hex.charAt(j) == '6') { b[i] = 0; b[i + 1] = 1; b[i + 2] = 1; b[i + 3] = 0; } if (hex.charAt(j) == '7') { b[i] = 1; b[i + 1] = 1; b[i + 2] = 1; b[i + 3] = 0; } if (hex.charAt(j) == '8') { b[i] = 0; b[i + 1] = 0; b[i + 2] = 0; b[i + 3] = 1; } if (hex.charAt(j) == '9') { b[i] = 1; b[i + 1] = 0; b[i + 2] = 0; b[i + 3] = 1; } if (hex.charAt(j) == 'a') { b[i] = 0; b[i + 1] = 1; b[i + 2] = 0; b[i + 3] = 1; } if (hex.charAt(j) == 'b') { b[i] = 1; b[i + 1] = 1; b[i + 2] = 0; b[i + 3] = 1; } if (hex.charAt(j) == 'c') { b[i] = 0; b[i + 1] = 0; b[i + 2] = 1; b[i + 3] = 1; } if (hex.charAt(j) == 'd') { b[i] = 1; b[i + 1] = 0; b[i + 2] = 1; b[i + 3] = 1; } if (hex.charAt(j) == 'e') { b[i] = 0; b[i + 1] = 1; b[i + 2] = 1; b[i + 3] = 1; } if (hex.charAt(j) == 'f') { b[i] = 1; b[i + 1] = 1; b[i + 2] = 1; b[i + 3] = 1; } } return b; } public static byte[] binaryToBigInteger(byte[] b) { int size = (b.length / 8) + 1; byte[] res = new byte[size]; for (int i = 0; i < size - 1; i++) { short n = 0; byte[] t = new byte[8]; for (int k = 0; k < 8; k++) t[k] = b[8 * i + k]; for (int j = 0; j < 8; j++) n += t[j] * Math.pow(2, j); res[size - 1 - i] = (byte) n; } res[0] = 0; return res; } public static byte[] LSFR() { byte[] arr = new byte[128]; for (int i = 0; i < 128; i++) arr[i] = 1; Random r = new Random(); int n = r.nextInt(128); while (n != 0) { byte temp = (byte) (arr[1] ^ arr[0]); for (int i = 0; i < 127; i++) { int j = i + 1; arr[i] = arr[j];} arr[127] = temp; n--; } return arr; } } Результат виконання програми:  Діаграма класів:  Висновок: На даній лабораторній роботі, я реалізувала програму підтримки комбінованих криптосистем на прикладі цифрового конверта.
Антиботан аватар за замовчуванням

15.02.2018 20:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!