Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364139
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62791)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21319)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21692)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8692)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3462)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20644)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Курсовая работа: Разработка Java-апплета и подписывание архивного JAR-файла электронной цифровой подписью

Название: Разработка Java-апплета и подписывание архивного JAR-файла электронной цифровой подписью
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа Добавлен 03:24:31 11 июня 2011 Похожие работы
Просмотров: 850 Комментариев: 16 Оценило: 2 человек Средний балл: 5 Оценка: неизвестно     Скачать

Государственное образовательное учреждение высшего профессионального образования

ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ

Кафедра «Информационные и вычислительные системы»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту

по дисциплине «Методы программирования»

на тему: «Разработка 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 и

обращением к локальной файловой системе

апплет архивный электронный цифровой подпись

importjava.applet.Applet;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

importjava.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;

// Флаг остановки анимации

booleanstopFlag;

// Поток выполняющий анимацию

Threadt = null;

//Текстовая область для вывода содержимого файла журнала

TextAreafileText;

// Имя файла-журнала для записи информации о работе апплета

StringfileName = "";

// Разделитель строк (признак конца строки)

Stringls;

// Буферизированный символьный поток записи в файл

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);

// ЛЕВАЯ НИЖНЯЯ ПАНЕЛЬ

// Панель с кнопками

p5 = new Panel(new GridLayout(2,2));

b1 = new Button("Квадрат");

b2 = new Button("Круг");

b3 = new Button("Треугольник");

b4 = new Button("Строка");

b1.addActionListener(this);

b2.addActionListener(this);

b3.addActionListener(this);

b4.addActionListener(this);

p5.add(b1);

p7.add(b2);

p5.add(b3);

p5.add(b4);

pb = new Panel(new GridLayout(1,2,5,0));

lb2 = newLabel("Управление потоками",lb1.CENTER);

start = new Button("Запуск"); start.addActionListener(this);

stop = new Button("Остановка");stop.addActionListener(this);

pb.add(start);

pb.add(stop);

// !!! ПАНЕЛЬ ДЛЯ ЧТЕНИЯ ФАЙЛА-ЖУРНАЛА !!!

pfield = new Panel(new BorderLayout());

pread = new Panel(new GridLayout(3,1));

read = new Button("Чтение файла-журнала");

read.addActionListener(this);

// Текстовая область для вывода информации из файла журнала

fileText = newTextArea();

// Название файла-журнала задаётся параметром в HTML-файле

// или если такого нет – создаётся по умолчанию

fileName = getParameter("FileName");

if (fileName == null)

fileName = "log.txt";

ls = System.getProperty("line.separator"); // разделитель строк

fileText.setBackground(Color.white);

pread.add(lb2);

pread.add(pb);

pread.add(read);

pfield.add(p5,BorderLayout.NORTH);

pfield.add(pread,BorderLayout.CENTER);

pfield.add(fileText,BorderLayout.SOUTH);

add(pfield);

// ПРАВАЯ НИЖНЯЯ ПАНЕЛЬ

// ПАНЕЛЬ С КАРТАМИ (ГЛАВНАЯ)

cardLO = new CardLayout();

cards = new Panel();

cards.setLayout(cardLO);

cards.setBackground(Color.white);

posX = 65;

// ПЕРВАЯ ПАНЕЛЬ В КАРТАХ

p6 = new Panel(new BorderLayout())

{

public void paint(Graphics g)

{

if(animFlag==0)

{

g.setColor(col);

g.drawRect(rectX,rectY,50,50); }

}

};

// ВТОРАЯ ПАНЕЛЬ В КАРТАХ

p7 = new Panel(new BorderLayout())

{

public void paint(Graphics g)

{

if(animFlag==1)

{

g.setColor(col);

g.fillOval(ovalX,ovalY,50,50); }

}

};

// ТРЕТЬЯ ПАНЕЛЬ В КАРТАХ

p8 = new Panel(new BorderLayout())

{

public void paint(Graphics g)

{

g.setColor(col);

int x[] = {posX,posX+40,posX+80};

int y[] = {80,20,80};

g.drawPolygon(x,y,3);

}

};

sb3= new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,100);

sb3.addAdjustmentListener(new AdjustmentListener()

{

public void adjustmentValueChanged(AdjustmentEvent ae)

{

posX = (ae.getValue())*(cards.getSize().width -80) /sb3.getMaximum();

p8.repaint();

}

});

p8.add(sb3,BorderLayout.SOUTH);

// ЧЕТВЁРТАЯ ПАНЕЛЬ В КАРТАХ

P9 = new Panel(new BorderLayout())

{

public void paint(Graphics g)

{

fm = g.getFontMetrics();

strWidth = fm.stringWidth("J A V A");

g.setFont(new Font("Dialog",Font.ITALIC,20));

g.setColor(col);

g.drawString("J A V A",posX,65);

}

};

sb4= new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,5);

sb4.addAdjustmentListener(new AdjustmentListener()

{

public void adjustmentValueChanged(AdjustmentEvent ae)

{

posX = (ae.getValue())*(cards.getSize().width – strWidth)/sb4.getMaximum();

p9.repaint();

}

});

p9.add(sb4,BorderLayout.SOUTH);

// ДОБАВЛЕНИЕ КАРТ В ПАНЕЛЬ С КАРТАМИ (cards)

cards.add(p6,"sqaure");

cards.add(p7,"oval");

cards.add(p8,"rect");

cards.add(p9,"text");

add(cards);

// СОЗДАНИЕ БУФЕРИЗИРОВАННОГО СИМВОЛЬНОГО ПОТОКА ЗАПИСИ В ФАЙЛ

try

{

// В качестве параметра в данном конструкторе класса Buffered используется

// ссылка на объект основного потока (приёмника данных)

out = new BufferedWriter(new FileWriter(fileName));

}

catch(IOException ex)

{

fileText.setText("Ошибка при создании потока записи: " + ls);

fileText.append(ex.toString() + ls);

}

catch(SecurityException ex)

{

fileText.setText("Нет разрешения доступа к файлу: " + ls);

fileText.append(ex.toString() + ls);

read.setEnabled(false);

}

if (out != null)

{

// Если создание Buffered-потока прошло успешно то в качестве данных, которые

// будут заполнять буфер будет являться сообщение от текущей дате и времени

Calendar c = Calendar.getInstance();

String dateMessage ="Дата и время: " + c.get(Calendar.DAY_OF_MONTH) + "/" +

(c.get(Calendar.MONTH)+1) + " – " + c.get(Calendar.YEAR) +

" " + c.get(Calendar.HOUR_OF_DAY) + ":" +

c.get(Calendar.MINUTE);

// После записи в String-переменную dateMessage информации о дате –

// вызывается метод writeLogMessage

writeLogMessage(dateMessage);

writeLogMessage("Инициализация апплета завершена");

}

/*--------------INIT--------------*/

}

// Вывод сообщения в буферизированный поток для записи в файл

privatevoidwriteLogMessage(Stringmessage)

{

// Запись в файл осуществляется вызовом метода write объек-та out типа BufferedWriter

try

{

out.write(message);

out.newLine();

}

catch(IOException ex)

{

fileText.setText("Ошибка записи в файл:" + ls);

fileText.append(ex.toString() + ls);

}

}

// Запускпотоков

public void run()

{

// Пока флаг остановки анимации равен false – происходит анимация

while (!stopFlag)

{

try

{

if(animFlag==0)

{

if(posFlag==0) // Начальное движение вправо по верхней грани

{

p6.repaint(); // Перерисовка

// Временное (на 40 мс) остановка потока для создания эффекта анимации

// Далее идут аналогичные изменения координат/

Thread.currentThread().sleep(40);

rectX+=5;

if(rectX>p6.getSize().width-50)

{

rectX-=7;

posFlag =1;

if(posFlag==1)

{

rColor = (int)(255*Math.random());

gColor = (int)(255*Math.random());

bColor = (int)(255*Math.random());

col = new Color(rColor,gColor,bColor);

p6.repaint();

}

}

}

if(posFlag==1) // Движение вниз по правой грани

{

p6.repaint();

Thread.currentThread().sleep(40); // приостановить поток

rectY+=5;

if(rectY>p6.getSize().height – 50)

{

rectY=p6.getSize().height-53;

posFlag=2;

if(posFlag==2)

{

rColor = (int)(255*Math.random());

gColor = (int)(255*Math.random());

bColor = (int)(255*Math.random());

col = new Color(rColor,gColor,bColor);

p6.repaint();

}

}

}

if(posFlag==2) // Движение влево по нижней грани

{

if(rectX>0)

{

p6.repaint();

Thread.currentThread().sleep(40);

rectX-=5;

}

else

{

rectX=0;

posFlag=3;

if(posFlag==3)

{

rColor = (int)(255*Math.random());

gColor = (int)(255*Math.random());

bColor = (int)(255*Math.random());

col = new Color(rColor,gColor,bColor);

p6.repaint();

}

}

}

if(posFlag==3) // Движение вверх по левой грани

{

if(rectY>0)

{

p6.repaint();

Thread.currentThread().sleep(40);

rectY-=5;

if(rectY<0)

{

rectX=0;

rectY=0;

p6.repaint();

{

if(rectX==0 && rectY==0)

{

posFlag=0;

if(posFlag==0)

{

rColor = (int)(255*Math.random());

gColor = (int)(255*Math.random());

bColor = (int)(255*Math.random());

col = new Color(rColor,gColor,bColor);

p6.repaint();

}

}

}

}

}

}

}

if(animFlag==1)

{

if(movFlag==0) // Движение по диагонали сверху в нижний угол

{

p7.repaint();

Thread.currentThread().sleep(50);

ovalX+=5;

ovalY+=5;

if(ovalX>p7.getSize().width-50)

{

ovalX = p7.getSize().width -50;

ovalY = p7.getSize().height-52;

movFlag =1;

if(movFlag==1)

{

rColor = (int)(255*Math.random());

gColor = (int)(255*Math.random());

bColor = (int)(255*Math.random());

col = new Color(rColor,gColor,bColor);

p7.repaint();

}

}

}

if(movFlag==1) // Движение по нижней грани

{

p7.repaint();

Thread.currentThread().sleep(50);

ovalX-=5;

if(ovalX<0)

{

ovalX=0;

movFlag=2;

if(movFlag==2)

{

rColor = (int)(255*Math.random());

gColor = (int)(255*Math.random());

bColor = (int)(255*Math.random());

col = new Color(rColor,gColor,bColor);

p7.repaint();

}

}

}

if(movFlag==2) // Движение по диагонали снизу вверх

{

p7.repaint();

Thread.currentThread().sleep(50);

ovalX+=5;

ovalY-=5;

if(ovalX>p7.getSize().width-50)

{

ovalX = p10.getSize().width – 52;

ovalY = 0;

movFlag=3;

if(movFlag==3)

{

rColor = (int)(255*Math.random());

gColor = (int)(255*Math.random());

bColor = (int)(255*Math.random());

col = new Color(rColor,gColor,bColor);

p7.repaint();

}

}

}

if(movFlag==3) // Движение по верхней грани в обратном направлении

{

p7.repaint();

Thread.currentThread().sleep(50);

ovalX-=5;

if(ovalX<0)

{

ovalX = 0;

movFlag=0;

if(movFlag==0)

{

rColor = (int)(255*Math.random());

gColor = (int)(255*Math.random());

bColor = (int)(255*Math.random());

col = new Color(rColor,gColor,bColor);

p7.repaint();

}

}

}

}

}

catch (InterruptedException e)

{

return; // Завершить поток

}

}

}

//Реализация блоков прослушивания от кнопок

publicvoidactionPerformed(ActionEvente)

{

String ac = e.getActionCommand();

if(ac.equals("Квадрат"))

{

animFlag=0;

cardLO.show(cards,"sqaure");

writeLogMessage("Рисуется Квадрат");

}

if(ac.equals("Круг"))

{

animFlag=1;

cardLO.show(cards,"oval");

writeLogMessage("Рисуется Круг");

}

if(ac.equals("Треугольник"))

{

cardLO.show(cards,"rect");

}

if(ac.equals("Строка"))

{

cardLO.show(cards,"text");

}

else if("Запуск".equals(ac))

{

t = new Thread(this);

stopFlag = false;

t.start();

start.setEnabled(false);

writeLogMessage("Поток запущен");

}

else if("Остановка".equals(ac))

{

stopFlag=true;

t = null;

start.setEnabled(true);

writeLogMessage("Поток остановлен");

}

if("Чтение файла-журнала".equals(ac))

{

try

{

// Сброс данных из буфера потока (запись в файл)

out.flush();

// Далее происходит чтение из файла и заполнение текстовой области

// данными, содержащимися в текстовом файле Lab4Log.txt

// Создание буферизированного символьного потока чтения из файла*/

BufferedReader in = new BufferedReader(new FileReader(fileName));

String s = "", line;

while ((line = in.readLine()) != null)

s += line + "\n";

fileText.setText(s);

in.close();

}

catch(IOException ex)

{

fileText.setText("Ошибка чтения файла: " + ls);

fileText.append(ex.toString());

}

}

}

// Реализация блока прослушивания от списка Listи переключателей(CheckBox)

public void itemStateChanged(ItemEvent ie)

{

if(ie.getSource() == list)

{

String s = list.getSelectedItem();

if(s.equals("Чёрный"))

{

col = Color.black;

}

if(s.equals("Синий"))

{

col = Color.blue;

}

if(s.equals("Красный"))

{

col = Color.red;

}

if(s.equals("Зелёный"))

{

col = Color.green;

}

if(s.equals("Жёлтый"))

{

col = Color.yellow;

}

if(s.equals("Оранжевый"))

{

col = Color.orange;

}

if(s.equals("Розовый"))

{

col = Color.pink;

}

if(s.equals("Фиолетовый"))

{

col = Color.magenta;

}

if(s.equals("Тёмно-серый"))

{

col = Color.darkGray;

}

p6.repaint();

p7.repaint();

p8.repaint();

p9.repaint();

}

}

// Обработка события от CheckBox(Определение доступности панелей и их компонентов)

if(ie.getSource() == cb1)

{

p1.setEnabled(true);p4.setEnabled(true);

p7.setEnabled(true);

cards.setEnabled(true);

}

if(ie.getSource() == cb2)

{

p1.setEnabled(true);p4.setEnabled(true);

p7.setEnabled(false);

cards.setEnabled(false);

}

if(ie.getSource() == cb3)

{

p1.setEnabled(true);p4.setEnabled(false);

p7.setEnabled(true);

cards.setEnabled(false);

}

if(ie.getSource() == cb4)

{

p1.setEnabled(true);p4.setEnabled(false);

p7.setEnabled(false);

cards.setEnabled(true);

}

}

}

2. Создание подписанного апплета

2.1 Создание архивного JAR -файла

Для подписания апплета электронной цифровой подписью его упаковывают в архивный JAR-файл. В данной курсовой работе для этой цели используется утилита jar , либо можно использовать интегрированную среду разработки приложений.

Для создания архива применилась команда следующего вида:

jar cfv Lab4.jar Lab4*.class,

где: jar название утилиты, которая упаковывает файлы и создаёт архив

cfv это набор из трёх параметров:

· с – указывает на то,что создаётся новый архив

· f первый элемент в списке файлов – имя архива, который должен быть создан

· v вывод на консоль сообщений о всех действиях утилиты jar

Lab 4. jar название нового архива

Lab 4*. class параметр указывает, что все файлы классов расположенные в текущем каталоге, размещаются в архивеLab 4. jar


При этом утилита jar создаёт каталогMETA - INF с файлом описания архиваMANIFEST . MF

Также в HTML файле, используемом для запуска апплета были внесены изменения, а именно добавлен атрибут ARCHIVE элемента Applet. Значение атрибута ARCHIVE = Lab 4. JAR .

2.2 Создание пары ключей и сертификата в хранилище ключей

Далее с помощью утилиты keytool создаётся пара ключей («открытый/закрытый») и сертификат по стандарту X.509 для псевдонима « Taraninkey » в хранилище ключейTaranin store в текущем каталоге.

Для создания самоподписанного сертификата применилась команда:

keytool -genkey -alias «Taraninkey» -keystore Taraninstore,

где:

- genkey параметр указывающий, что утилита keytool должна сгенерировать ключи

-alias « Taraninkey » – псевдоним, под которым в хранилище ключей размещается сертификат

- keystore Taraninstore название хранилища ключей

Также по требованиям утилиты, был введён пароль защиты хранилища ключей, информация о владельце сертификата и пароль защиты закрытого ключа.

В данном курсовом проекте пароль закрытого ключа «Taraninkey » – 123369, а пароль хранилища ключей «Taraninstore » – 123.

При создании ключей и подписании сертификата были использованы алгоритмы:

· Алгоритм ключа RSA

· Алгоритм подписи MD-5

2.3 Подписывание JAR -файла цифровой подписью

Архивный JAR-файл подписывается с помощью утилиты jarsigner. используя следующую команду:

jarsigner - keystore Taraninstore Lab 4. jar « Taraninkey »

Утилита требует ввести пароль хранилища ключей и пароль закрытого ключа после чего модифицирует файл описания архива MANIFEST.MF в каталоге META-INF архива.

В него добавляются записи для каждого файла класса, входящего в архив. Запись файла класса включает имя и дайджест файла.

Также в каталог META-INF архива добавляется файл подписиTARNINK .SF.

Содержимое файла подписи TARNINK .SF.

Файл подписи идентифицирует каждый из файлов в архиве, алгоритм дайджестасодержит для каждого файла значение дайджеста, вычисленного из записи файла в файле описания MANIFEST.M F .

На заключительном этапе подписания в каталог META-INF файла архива добавляется двоичный файл подписиTARANINK . R SA. Расширение файла подписи указывает, что утилита keytool использует алгоритм цифровой подписиRSA . Этот файл содержит подпись файла подписиTARNINK .SF и сертификат, заверяющий подлинность открытого ключа, соответствующего закрытому ключу, использованному при создании подписи.

2.4 Задание политики безопасности для подписанного апплета

В данной курсовом проекте для получения доступа к локальной файловой системе, для подписанного электронной цифровой подписью апплета, был создан пользовательский файл политики безопасностиLab 4.policy.


Содержимое данного файла – набор разрешающих записей, в которых указываются права доступа, предоставляемые источнику кода апплета. Данная запись права доступа предоставляет право чтения/записи всех файлов файловой системы.

3. Выполнение подписанного апплета

При запуске апплета в среде браузера MS IE 5(6) с модулем Javaplgu-in из JDK 1.4.x система безопасности задаёт вопрос о доверии поставщику, чьим сертификатом заеверен апплет.

При выборе пользователем ответаGrant this session апплет получает полные права доступа ко всем ресурсам.Для обращения к локальной файловой системе пользователь может осущесвить чтение файла-журнала, хранящегося на локальном диске, нажав кнопку « View Certificate ».

При выборе пользователемDeny апплет получает разрешене работать только с теми ресурсами, права доступа к которым прописаны в файлах политики безопасности. При выбореGrant always апплет получает полные права доступа ко всем ресурсам, при следующем запуске апплета не будет задаваться запрос о доверии поставщику, права доступа будут автоматически ко всем ресурсам.

При запуске подписанного апплета под браузером appletviewer апплет автоматически получает права доступа к ресурсам, указанные в пользовательском файле политики безопасности, размещённом в текущем каталоге.

Список использованных источников

1. Корниенко А.А., Кожомбердиева Г.И., Ерофеев П.В. Электронная цифровая подпись и безопасность Java-апплетов. Метод. указания. – СПб.: ПГУПС, 2005. – 28 с.

2. Корниенко А.А., Кожомбердиева Г.И., Киселев И.С. Методы криптографической защиты информации и их реализация на платформе Java: Метод. указания. – СПб.: ПГУПС, 2006. – 35 с

3. Ноутон П., Шилдт Г. Java 2: Пер. с англ. – СПб.: БХВ-Петербург, 2006

4. Java 2 SDK, Standard Edition Documentation, version 1.2.2.

5. Яворски Дж., Перроун П. Система безопасности Java, 2001.

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Делаю рефераты, курсовые, контрольные, дипломные на заказ. Звоните или пишите вотсап, телеграмм, вайбер 89675558705 Виктория.
08:43:58 20 октября 2021
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Olya05:26:19 26 августа 2019
.
.05:26:18 26 августа 2019
.
.05:26:18 26 августа 2019
.
.05:26:17 26 августа 2019

Смотреть все комментарии (16)
Работы, похожие на Курсовая работа: Разработка Java-апплета и подписывание архивного JAR-файла электронной цифровой подписью

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

Да, в любом случае.
Да, но только в случае крайней необходимости.
Возможно, в зависимости от цены.
Нет, напишу его сам.
Нет, забью.



Результаты(286478)
Комментарии (4153)
Copyright © 2005-2021 HEKIMA.RU [email protected] реклама на сайте