Державна освітня установа вищої професійної освіти 
  Петербурзький державний УНІВЕРСИТЕТ ШЛЯХІВ ПОВІДОМЛЕННЯ 
  Кафедра В«Інформаційні та обчислювальні системиВ» 
  ПОЯСНЮВАЛЬНА ЗАПИСКА 
  до курсового проекту 
  з дисципліни В«Методи програмуванняВ» 
  на тему: В« Розробка Java-аплета і підписування архівного JAR-файлу електронним цифровим підписом  В»
  Виконав: 
  студент групи КІБ-708 
  Таранін В.В. 
  Керівник: 
  к.т.н., доц. Кожомбердіева Г.І. 
  Санкт-Петербург 2009 
  
   Завдання 
    
  по курсовому проектом 
  по дисципліни В«Методи програмуванняВ» 
  на тему : В«Розробка Java-аплета і підписування архівного JAR-файлу електронним цифровим підписом В»
  В· В якості вихідних даних до курсового проекту використовується аплет, є результатом виконання лабораторної роботи № 4 В«Розробка аплету з ефектом анімації на основі багатопоточності Java В». 
  Варіант завдання № 20 
  В· Необхідно розширити функціональність аплету з ефектом анімації, реалізувавши звернення до локальної файлової системи. 
  В· Створити архівний JAR-файл, що містить аплет. 
  В· Підписати JAR-файл електронним цифровим підписом (ЕЦП) і задати політику безпеки для підписаного аплету, включивши в файл політики відповідну запис, роздільну доступ до локальної файлової системи і виконання операцій читання-запису. 
  При виконанні курсового проекту використовувати утиліти  jar ,  keytool  і  jarsigner , а також комплект JDK 1.4.x з модулем plug-in для браузера MS IE 5, (6), (7). 
  
   Анотація 
  В даному курсовому проекті був розроблений Java-аплет, який використовує механізм багатопоточності Java: використання двох потоків команд, що реалізують рух геометричних фігур в області малювання аплету. Також аплет має можливість звертатися до локальній файловій системі, при наданні відповідних прав доступу. Можливість звернення до локальної файлової системі реалізована з використанням спеціалізованих класів Java API. 
  Архівний JAR-файл, що містить аплет, підписується електронним цифровим підписом. Для апплета задається політика безпеки, шляхом створення користувальницького файлу політики безпеки, який дозволяє аплету отримати доступ до локальної файловій системі і забезпечує можливість роботи аплету за межами моделі безпеки Sandbox - В«ПісочницяВ». 
  Підписаний електронним цифровим підписом аплет виконується в середовищі MS IE з модулем plug-in з JDK 1.4.x. 
  Після запуску аплета користувачеві надається можливість надати довіру підписаним аплету і дозволити виконання операцій вводу-виводу у файл. 
  
    Зміст  
    
  Введення 
  1. Аплет з ефектом анімації на основі багатопоточності Java та обігом до локальної файлової системи 
  2. Створення підписаного аплету 
  2.1 Створення архівного JAR-файлу 
  2.2 Створення пари ключів та сертифікату в сховище ключів 
  2.3 Підписування JAR-файлу цифровим підписом 
  2.4 Завдання політики безпеки для підписаного аплету 
  3. Виконання підписаного аплету 
  Список використаних джерел 
    
  
    Введення  
  Платформа Java 2 розташовує потужною вбудованою системою безпеки, що включає API-інтерфейси та механізми, які використовуються для забезпечення безпеки аплетів і додатків Java. Серед особливостей мови програмування Java, які забезпечують надійність і безпеку можна виділити: архітектурну незалежність, інтерпретованість, переносимість, відсутність покажчиків, строгу типізацію, ефективний механізм обробки виключень. Важливими неот'емлімой компонентами системи безпеки Java 2 є Java Cryptography Architecture (JCA) - архітектура шифрування Java, а також Java Cryptography Extension (JCE) - криптографічне розширення Java. 
  Метою даного курсового проекту є - підписання архівного JAR-файлу, що містить аплет, електронним цифровим підписом, а також завдання політики безпеки для підписаного аплету; ознайомлення студентів з криптографічними методомі захисту інформації та можливостями, які надає Java розробниками програмного забезпечення. Для цього необхідно: створити архівний JAR-файл, пари ключів та сертифікату в сховище ключів, далі підписати JAR-файл цифровим підписом і задати політику безпеки для підписаного аплету. 
  Результатом даної курсової роботи є підписаний електронним цифровим підписом аплет, який має можливість звертатися до локальної файлової системи. 
    
  
    1.   Аплет з ефектом анімації на основі багатопоточності   Java     і  
   зверненням до локальної файлової системи  
  аплет архівний електронний цифровий підпис 
  import java.applet.Applet; 
  import java.awt. *; 
  import java.awt.event. *; 
  import java.io. *; 
  import java.util.Calendar; 
 // Клас аплету, який реалізує інтерфейси блоків прослуховування подій 
  public class Lab4 extends Applet implements ActionListener, ItemListener, Runnable 
  {
  Panel p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, cards, pfield, pb, pread; 
  Label lb1, lb2, lb3; 
  CheckboxGroup cbg; 
  Checkbox cb1, cb2, cb3, cb4; 
  List list; 
  Canvas cv; 
  Button b1, b2, b3, b4, start, stop, read; 
  CardLayout cardLO; 
  Scrollbar sb1, sb2, sb3, sb4; 
  Color col; 
  int posX, strWidth; 
  FontMetrics fm; 
  int rectX = 0, rectY = 0, posFlag = 0, movFlag = 0, ovalX = 0, ovalY = 0; 
  int animFlag = 0; 
  int rColor, gColor, bColor; 
 // Прапор зупинки анімації 
  boolean stopFlag; 
 // Потік виконує анімацію 
  Thread t = null; 
 // Текстова область для виведення вмісту файлу журналу 
  TextArea fileText; 
 // Ім'я файлу-журналу для запису інформації про роботу аплету 
  String fileName = ""; 
 // Роздільник рядків (ознака кінця рядка) 
  String ls; 
 // Буферізірованний символьний потік запису в файл 
  BufferedWriter out; 
  public void init () 
  {
  setLayout (new GridLayout (2,2)); 
  setForeground (Color.black); 
  col = Color.black; 
 // ЛІВА ВЕРХНЯ ПАНЕЛЬ 
  p1 = new Panel (new BorderLayout ()); 
  p1.setBackground (Color.lightGray); 
  p2 = new Panel (); 
  lb1 = new Label ("Активна панель:", lb1.CENTER); 
  p2.add (lb1); 
  p1.add (p2, BorderLayout.NORTH); 
 // Панель радіокнопок всередині ЛІВОЇ ВЕРХНЬОЇ панелі 
  p3 = new Panel (new GridLayout (2,2)); 
  cbg = new CheckboxGroup (); 
  cb1 = new Checkbox ("Усі панелі", cbg, true); 
  cb2 = new Checkbox ("1-я панель", cbg, false); 
  cb3 = new Checkbox ("2-я панель", cbg, false); 
  cb4 = new Checkbox ("3-я панель", cbg, false); 
  cb1.addItemListener (this); 
  cb2.addItemListener (this); 
  cb3.addItemListener (this); 
  cb4.addItemListener (this); 
  p3.add (cb1); 
  p3.add (cb2); 
  p3.add (cb3); 
  p3.add (cb4); 
  p1.add (p3, BorderLayout.CENTER); 
  add (p1); 
 // ВЕРХНЯ ПРАВИЙ ПАНЕЛЬ 
  p4 = new Panel (new GridLayout (1,1)); 
  list = new List (9, false); 
  list.add ("Чорний"); 
  list.add ("Синій"); 
  list.add ("Червоний"); 
  list.add ("Зелений"); 
  list.add ("Жовтий"); 
  list.add ("Помаранчевий"); 
  list.add ("Рожевий"); 
  list.add ("Фіолетовий"); 
  list.add ("Темно-сірий"); 
  list.addItemListener (this); 
  p4.add (list); 
  add (p4); 
 // ЛІВА НИЖНЯ ПАНЕЛЬ 
 // Панель ...