Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Анализ предметной области

Тип Реферат
Предмет Информатика и программирование
Просмотров
336
Размер файла
189 б
Поделиться

Ознакомительный фрагмент работы:

Анализ предметной области

Реферат

Курсовая работа содержит 37 страницы, 6 рисунков, 4 приложения, включая дампы экрана и схемы и код приложения. При разработке использовалось 10 источников.

Основным объектом исследования является проектирование java - приложения использующего набор стандартных библиотек (JDK security API). Для реализации шифровки, дешифровки файлов, а также для создания и проверки цифровой подписи. Данные библиотеки в настоящий момент широко используются в большинстве крупных и нуждающихся в защите приложений. Автор не выдвигает новых подходов к реализации алгоритмов шифрования и оформлению программы. Основной упор делается на стабильность и надежность работы программы. С точки зрения пользователя данная программа имеет учебный и коммерческий характер.

Ключевые слова: КРИПТОГРАФИЯ, АЛГОРИТМЫ, ЦИФРОВАЯ ПОДПИСЬ, ПУБЛИЧНЫЙ КЛЮЧ, JAVA, JDKSECURITYAPI

Содержание

Введение

1. Анализ предметной области

1.1 Описание задачи

2.Реализация проекта

2.1 Реализация цифровой подриси файлов

2.2 Реализация алгоритма DES для шифрования и расшифровки файла

2.3 Запись ключей в класс с помощью сериализации

2.4 Стандартные диалоговые окна открытия и сохранения файла

3. Работа с приложением

3.1 Шифрование файла

3.2 Расшифровка закодированого файла

3.3 Создания цифровой подписи файла

3.4 Проверка цифровой подписи файла

Перечень ссылок

Приложение А

Приложение Б

Приложение В

Приложение Г


Введение

симметрический шифрование цифровой файл

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

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

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

Существует несколько подходов к решению поставленной задачи.

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

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

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

Стоит отметить, что криптосистема работает по определенной методологии (процедуре).

Эта методология предусматривает использование:

одного или более алгоритмов шифрования, которые можно выразить в виде математических формул;

ключей, используемых данными алгоритмами шифрования,

системы управления ключами,

незашифрованного текста,

зашифрованного текста (шифртекста).


1. Анализ предметной области

1.1 Описание задачи

В связи с явной сетевой направленностью языка Java потребовалось уделить должное внимание средствам защиты. В первую очередь это касается пересылки важных данных между, например, клиентом и сервером, а также запуска программ или апплетов. Такие средства были разработаны и встроены в набор стандартных библиотек (JDK security API).

Примером необходимости защиты может служить желание пользователя-получателя иметь возможность верификации, что дает определенные гарантии подлинности документа или кода.. В качестве подписываемого объекта могут выступать апплеты, которые широко распространены в Интернете. В результате у получателя появляется уверенность, что информация получена именно от ожидаемого отправителя, а не возможного злоумышленника, и не была изменена в процессе пересылки. Для обеспечения такого рода безопасности служат цифровые подписи и сертификаты.

Симметрическое шифрование - способ шифрования, в котором для (за)шифрования и расшифрования применяется один и тот же криптографический ключ.

В данной курсовой работе мы рассмотрим реализацию алгоритма симметрического шифрования в java на примере алгоритма DES. И создание, и проверку цифровой подписи алгоритмом DSA.


2.Реализация проекта

2.1 Реализация цифровой подриси файлов

Рисунок 2.1 – Схема действий при генерации подписи

Работа отправителя

Генерация ключей

Программист, не вникая в математические формулы и особенности их реализации, может использовать уже доступные готовые алгоритмы и методы криптографии. Они предоставляются определенными организациями, так называемыми провайдерами (provider). По умолчанию встроенные средства Java поставляет провайдер "SUN". Таким образом, единственное, что необходимо делать, это указывать собственно алгоритм и провайдера.

В первую очередь необходимо сгенерировать пару ключей - public key и private key. Для этого используется класс KeyPairGenerator. Для получения конкретного объекта этого класса необходимо вызвать static factory метод getInstance(). В качестве аргументов передаются строки с указанием алгоритма и провайдера. Например, для использования DSA (Digital Signature Algorithm) и провайдера SUN необходимо писать:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");

В связи с тем, что большинство криптографических алгоритмов являются вероятностными, необходимо создать вероятностный источник — объект класса SecureRandom. При этом существует возможность использовать разные методы, например, SHA1PRNG (pseudo-random-number generation algorithm).

SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");

Теперь необходимо проинициализировать объект keyGen, передав ему 2 параметра — длину в битах и источник случайности.

keyGen.initialize(1024, random);

Последним этапом является собственно генерация пары ключей (метод generateKeyPair()) и выделение двух отдельных ключей (методы getPrivate() и getPublic()).

KeyPair pair = keyGen.generateKeyPair();

PrivateKey privKey = pair.getPrivate();

PublicKey pubKey = pair.getPublic();

Созданиеподписи.

В первую очередь необходимо создать объект класса Signature, вызвав метод getInstance():

Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");

В данном случае используется алгоритм DSA с SHA1 (хэш-функция). Затем идет процесс инициализации подписи ключом. На этом этапе используется закрытый ключ, полученный ранее:

dsa.initSign(privKey);

После этого необходимо свести подпись и сами данные. Для этого вызывается метод update(), получаемый в качестве параметра байтовый массив данных, которые должны быть подписаны.

На последнем этапе генерируется сама подпись, которая представляется в виде байтового массива.

byte[] realSig = dsa.sign();

Сохранение подписи.

После получения подписи и ключей необходимо сохранить их, например, в файл, и отправить адресату вместе с исходными данными. Следует подчеркнуть, что закрытый ключ не посылается, а остается у отправителя. Отсылается же открытый ключ.

Итак, отправитель посылает получателю, например, по электронной почте или через прямое сетевое соединение следующие файлы:

1.Открытый ключ (public key)

2.Цифровую подпись (digital signature)

3.Исходные данные (подписанный документ или код).

Рисунок 2.1 - Схема действий при верификации подписи

Работа с ключом: чтение из файла и преобразование в PrivateKey.

Получатель располагает последовательностью байт, представляющих открытый ключ. Необходимо получить байтовый массив (Byte[] encKey), например, прочитать эти данные из файла в массив, а затем преобразовать его в объект класса PublicKey.

Для этого можно воспользоваться классом KeyFactory, который по спецификации ключа может восстановить объект класса Key (PrivateKey и PublicKey являются потомками класса Key). Таким образом, необходимо получить так называемую спецификацию ключа. Ее можно получить, основываясь на том, какой стандарт использовался при генерации ключа. В данном случае ключ был сгенерирован с помощью провайдера "SUN", поэтому он удовлетворяет стандарту X.509.

Генерация спецификации ключа (необходим пакет java.security.spec.*):

X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);

Создание объекта класса KeyFactory, соответствующего цифровой подписи и провайдеру "SUN".

KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");

ПолучениеобъектаклассаPublicKey

PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);

Работа с подписью: чтение из файла и Signature.

Подпись также необходимо перевести в байтовый массив (Byte[] sigToVerify). Затем необходимо создать объект типа Signature, также как это делалось ранее.

Signature sig = Signature.getInstance("SHA1withDSA", "SUN");

sig.initVerify(pubKey);

Во время чтения необходимо применять метод update() объекта sig, аналогично случаю создания подписи.

Проверка подлинности (верификация).

Завершающим этапом работы получателя является собственно получение ответа на вопрос о правдивости подписи и данных. С помощью метода verify() объекта класса Signature можно получить результатом boolean:

boolean verifies = sig.verify(sigToVerify);

Значение будет true, если данная подпись (sigToVerify) действительная подпись для данных, созданная с использованием открытого ключа (pubKey).

Следует отметить, что первый этап, связанный с работой отправителя, требует некоторого времени для генерации необходимых для отправки данных. Для компьютера класса Intel Pentium III с частотой 733 МГц время генерации составляет приблизительно 10 секунд. Кстати, время, затрачиваемое для верификации на порядок меньше.

Кроме рассмотренного DSA, предоставляются и многие другие средства криптографической защиты, как RSA, DES и другие. Их использование подобно представленному DSA.

2.2 Реализация алгоритма DES для шифрования и расшифровки файла

Симметрическое шифрование - способ шифрования, в котором для (за)шифрования и расшифрования применяется один и тот же криптографический ключ. Рассмотрим реализацию симметрического шифрования в java на примере алгоритма DES. В первую очередь нам понадобится класс javax.crypto.Cipher, который реализует базовые функции популярных криптографических алгоритмов шифрования. Для создания экземпляра такого класса используется статистический метод Cipher.getInstance , который в качестве параметра получает имя криптографического алгоритма шифрования. В нашем случае:

Cipherchr= Cipher.getInstance("DES");

Следующим шагом будет инициализация экземпляра класса и указание каком режиме он будет работать: в режиме шифрования chr.init(Cipher.ENCRYPT_MODE, key); - , или расщифрования –

chr.init(Cipher.DECRYPT_MODE, key);

Как видно, появился новый неизвесный параметр: key - это 56 битный ключ алгоритма DES. Данный параметр имеет тип javax.crypto.SecretKey и может быть создан с помощью класса:

javax.crypto.KeyGenerator. SecretKey key = KeyGenerator.getInstance("DES").generateKey();

Шифрование или расшифрование выполняет функция doFinal класса Cipher, которая на входе получает масив байт и возвращает также масив байт, но уже соответственно преобразованных. Что именно (шифрование или расшифрование) будет выполнять функция зависит от того что было указанно в первом параметре функции инициализации init(). Итак из всего выше сказанного можно скомпоновать небольшой класс. Класс по работе скриптографическим алгоритмом шифрования DES. К классу прилагается функция main, для того что-бы проверить правильность работы созданных функций.

2.3 Запись ключей в класс с помощью сериализации

Для того, чтобы объект был сериализуемым, класс этого объекта должен реализовывать интерфейс java.io.Serializable.

Интерфейс java.io.Serializable не содержит методов и является маркером, который говорит механизму сериализации о том, что объект, реализующий данный интерфейс, может быть сериализован.

Теперь, когда у нас уже есть класс, реализующий интерфейс java.io.Serializable, следующим шагом станет написание алгоритма, ответственного за сериализацию экземпляра класса SecretKey.

2.4 Стандартные диалоговые окна открытия и сохранения файла

Swing содержит готовое окно для выбора файла (полезное, например, для программирования пункта меню Файл --> Открыть). Объект класса JFileChooser создается простым конструктором без параметров, после чего может выводиться на экран методом showOpenDialog(). Этот метод возвращает результат действий пользователя по выбору файла, который сравнивается с одной из следующих констант:

APPROVE_OPTION — выбор файла прошел успешно. Теперь можно методом getFile() получить выбранный файл.

CANCEL_OPTION — пользователь отменил выбор файла, щелкнув на кнопке Cancel.

ERROR_OPTION — при выборе файла произошла ошибка, либо пользователь закрыл диалоговое окно крестиком.

Метод showSaveDialog() отображает то же самое окно, но теперь оно работает в режиме сохранения. Пользователь выбирает директорию для сохранения файла и может ввести его имя. Метод возвращает результат того же типа, что и showOpenDialog(). Если выбор пути для сохранения прошел успешно, вызов метода getFile() вернут путь, куда пользователь желает сохранить файл.

Следует иметь в виду, что сам класс JFileChooser ничего не открывает и не сохраняет. Он только возвращает путь к выбранному пользователем файлу. А открыть его или сохранить файл в заданном месте должна уже сама программа.

Метод setDialogTitle(String title) позволяет задать окну заголовок.


3. Работа с приложением

3.1 Шифрование файла

Для шифрования файла нажать на кнопку «Зкодировать файл» главного меню программы (Рис. 3.1), после чего откроется стандартное диалоговое окно для открытия файла (Рис. 3.2), в котором нужно выбрать файл для шифрования. После этого откроется стандартное диалоговое окно для сохранения файлов (Рис. 3.3), в котором необходимо выбрать место расположения и названия закодированного файла. Затем появляется еще одно диалоговое окно сохранения файла с требованьем указать ему адрес сохранения файла ключей. После чего в случае успешной шифровки файла по алгоритму DES выдается сообщение типа MessageBox с уведомлением о успешном кодировании файла(Рис 3.4).

Рисунок 3.1 – Главное окно программы

Рисунок 3.2 – Стандартное диалоговое окно для открытия файла


Рисунок 3.3 – Стандартное диалоговое окно для сохранения файла

Рисунок 3.4 – Стандартное окно сообщения

3.2 Расшифровка закодированого файла

Для расшифровки закодированного файла необходимо выбрать в главном окне программы (Рис 3.1) пункт меню «расшифровать файл». После чего указать: файл для расшифровки, адрес для сохранения декодированного файла, ключ шифрования. После чего в случае совпадения ключа происходит успешная расшифровка по указанному адресу и появляется сообщения с уведомлением об успешном завершении, или о несоответствии файла ключей.

3.3 Создания цифровой подписи файла

Для создания цифровой подписи файла необходимо в главном меню программы (Рис. 3.1) выбрать пункт меню «Подписать файл». После чего в стандартном диалоговом окне открытия файла указать путь к подписываемому файлу. После чего выводиться сообщение о успешном создании цифровой подписи и в директории с эти файлом создается файл с таким же именем и расширением .sig – это цифровая подпись и с расширением .pubkey – это публичный ключ для проверки цифровой подписи.

3.4 Проверка цифровой подписи файла

Для проверки цифровой подписи файла необходимо в главном меню программы (Рис. 3.1) выбрать пункт меню «Проверить цифровую подпись». После чего необходимо указать путь к проверяемому файлу, путь к файлу с цифровой подписью и файл с публичным ключом. В случае корректного указания всех файлов и неизменности проверяемого файла выдается сообщение, что верификация прошла успешно. Если хотя бы один бит в одном из этих файлов был модифицирован, выдается уведомление о несанкционированном доступе.


Перечень ссылок

1. “Введение в криптографию” / Под общ. ред. В.В.Ященко. — М.:МЦНМО, ”ЧеРо”, 1998. — 272c.

2. А.Никитин, “Универсальные криптографические интерфейсы”, Защита информации, Конфидент, N5, 1997.

3. М.Могран, “Java 2. Руководство разработчика”, Пер. с англ. : Уч. пос. — М.: “Вильямс”, 2000. — 720c. : ил.

4. Vipul Ved Prakash, Benjamin Trott, “Asymmetric Cryptography in Perl”, O'Reilly, 2001.

5. R.Coleridge, “The Cryptography API, or How to Keep a Secret”, MSDN, 1996.

6. D.Esposito, “Supporting CryptoAPI in Real-World Applications”, MSDN, 1997.

7. http://java.org

8. S.K.Parmar, “An introduction to security”, Fred Cohen &Associates, 2000.

9. R.L/Rivest, A.Shamir and L.Adleman, “A method for obtaining digital signatures and public key cryptosystems”. Commun. ACM, vol.21, p. 120-126, 1978.

10. W.Diffie and M.E.Hellman, “New directions in cryptograpgy”, IEEE Trans.Inf.Theory, vol.IT-22, N6, p.644-654, Nov. 1976.

11. A.Menezes, P.van Oorschot, S.Vanstone, “Handbook of applied cryptography”, CRC Press, 1996.


Приложение А

Код класса my_java_sec

public class my_java_sec {

@SuppressWarnings("deprecation")

public static void main(String[] args){

// TODO Auto-generated method stub

FInterfaceForm fif = new FInterfaceForm();

fif.show();

}

}


ПриложениеБ

Кодклассаcoding_files

import java.io.FileInputStream;

import java.io.FileOutputStream;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

public class CodingFiles {

Cipher ecipher;

Cipher dcipher;

public CodingFiles() {

// TODO Auto-generated constructor stub

}

public SecretKey initCoding()

{

try{

SecretKey key = KeyGenerator.getInstance("DES").generateKey();

ecipher = Cipher.getInstance("DES");

dcipher = Cipher.getInstance("DES");

ecipher.init(Cipher.ENCRYPT_MODE, key);

dcipher.init(Cipher.DECRYPT_MODE, key);

return key;

}

catch(Exception e)

{

}

return null;

}

public void iniCoding(SecretKey key)

{

try{

ecipher = Cipher.getInstance("DES");

dcipher = Cipher.getInstance("DES");

ecipher.init(Cipher.ENCRYPT_MODE, key);

dcipher.init(Cipher.DECRYPT_MODE, key);

}

catch(Exception e)

{

}

}

public boolean fileEncode(String sourse,String result)

{

try{

FileInputStream inFile = new FileInputStream(sourse);

int bytesAvailable = inFile.available();

byte[] bytesReaded = new byte[bytesAvailable];

inFile.read(bytesReaded,0,bytesAvailable);

inFile.close();

byte[] br_enc = ecipher.doFinal(bytesReaded);

FileOutputStream outFile = new FileOutputStream(result);

outFile.write(br_enc);

outFile.close();

return true;

}

catch(Exception e)

{}

return false;

}

public boolean fileDecode(String sourse,String result)

{

try{

FileInputStream enc_inFile = new FileInputStream(sourse);

int enc_bytesAvailable = enc_inFile.available();

byte[] enc_bytesReaded = new byte[enc_bytesAvailable];

enc_inFile.read(enc_bytesReaded,0,enc_bytesAvailable);

enc_inFile.close();

byte[] br_dec =dcipher.doFinal(enc_bytesReaded);

FileOutputStream dec_outFile = new FileOutputStream(result);

dec_outFile.write(br_dec);

dec_outFile.close();

return true;

}

catch(Exception e)

{}

return false;

}

}


Приложение В

КодклассаDigitalSignature

import java.io.BufferedInputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.security.KeyFactory;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.SecureRandom;

import java.security.Signature;

import java.security.spec.X509EncodedKeySpec;

public class DigitalSignature {

public static void saveToFile (byte[] info, String filename) {

try {

FileOutputStream fos = new FileOutputStream(filename);

fos.write(info);

fos.close();

}

catch (Exception e){}

}

public static byte[] readFromFile (String fileName) {

byte[] info;

try {

FileInputStream fis = new FileInputStream(fileName);

info = new byte[fis.available()];

fis.read(info);

fis.close();

}

catch (Exception e) {info = new byte[0];}

return(info);

}

public static boolean CreateDigitalSignatureForFile(String puth)

{

try

{

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");

SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");

keyGen.initialize(1024, random);

KeyPair pair = keyGen.generateKeyPair();

PrivateKey priv = pair.getPrivate();

PublicKey pub = pair.getPublic();

Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");

dsa.initSign(priv);

FileInputStream fis = new FileInputStream(puth);

BufferedInputStream bufin = new BufferedInputStream(fis);

byte[] buffer = new byte[1024];

int len;

while (bufin.available() != 0)

{

len = bufin.read(buffer);

dsa.update(buffer, 0, len);

}

bufin.close();

byte[] realSig = dsa.sign();

saveToFile (realSig,puth+".sig");

byte[] key = pub.getEncoded();

saveToFile (key,puth+".pubkey");

//byte[] priv_key = priv.getEncoded();

//saveToFile (priv_key,"privkey_"+puth);

return true;

}

catch (Exception e){}

return false;

}

public static boolean TestedByDigitalSignature(String puth, String sign_puth, String pubkey_puth){

try{

byte[] encKey = readFromFile(pubkey_puth);

X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);

KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");

PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);

byte[] sigToVerify = readFromFile(sign_puth);

Signature sig = Signature.getInstance("SHA1withDSA", "SUN");

sig.initVerify(pubKey);

FileInputStream datafis = new FileInputStream(puth);

BufferedInputStream bufin = new BufferedInputStream(datafis);

byte[] buffer = new byte[1024];

int len;

while (bufin.available() != 0)

{

len = bufin.read(buffer);

sig.update(buffer, 0, len);

}

bufin.close();

boolean verifies = sig.verify(sigToVerify);

return verifies;

}

catch(Exception e){}

return false;

}

}


Приложение Г

КодклассаFInterfaceForm

import java.awt.Button;

import java.awt.Event;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import javax.crypto.SecretKey;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

public class FInterfaceForm extends JFrame{

/**

*

*/

private static final long serialVersionUID = 1L;

Button bt_enc = new Button("Закодировать файл");

Button bt_dec = new Button("Расшифровать файл");

Button bt_dsig = new Button("Подписать файл");

Button bt_testdsig = new Button("Проверить цифровую подпись");

public FInterfaceForm() {

// TODO Auto-generated constructor stub

this.setLayout(null);

this.setBounds(200, 200, 420, 90);

this.setTitle("Java sercurity");

bt_enc.setBounds(0, 0, 200, 25);

bt_dec.setBounds(200, 0, 200, 25);

bt_dsig.setBounds(0, 25, 200, 25);

bt_testdsig.setBounds(200, 25, 200, 25);

this.add(bt_enc);

this.add(bt_dec);

this.add(bt_dsig);

this.add(bt_testdsig);

}

@SuppressWarnings("deprecation")

@Override

public boolean action(Event evt, Object arg1) {

// TODO Auto-generated method stub

if(evt.target instanceof Button)

{

if(evt.target.equals(bt_enc))

{

try{

JFileChooser jfc = new JFileChooser();

jfc.setDialogTitle("Выберите файл для кодирования");

if( jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

JFileChooser jfc_s = new JFileChooser();

jfc_s.setDialogTitle("Как сохранить файл?");

if( jfc_s.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {

JFileChooser jfc_s_key = new JFileChooser();

jfc_s_key.setDialogTitle("Как сохранить ключ?");

if( jfc_s_key.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {

CodingFiles cf = new CodingFiles();

SecretKey sk = cf.initCoding();

FileOutputStream fos = new FileOutputStream((jfc_s_key.getSelectedFile()).getAbsolutePath());

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(sk);

oos.flush();

oos.close();

if(cf.fileEncode((jfc.getSelectedFile()).getAbsolutePath(), (jfc_s.getSelectedFile()).getAbsolutePath()))

JOptionPane.showMessageDialog(new JButton("Ok"), "Файл закодирован успешно!","Поздравляем!", JOptionPane.WARNING_MESSAGE);

else

JOptionPane.showMessageDialog(new JButton("Ok"), "Произошла ошибка при кодировании файла!","Что-то не так!", JOptionPane.WARNING_MESSAGE);

}

}

}

}catch(Exception e){}

}

if(evt.target.equals(bt_dec))

{

try{

JFileChooser jfc = new JFileChooser();

jfc.setDialogTitle("Выберите файл для расшифровки.");

if( jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

JFileChooser jfc_o = new JFileChooser();

jfc_o.setDialogTitle("Выбирете ключ для расшифровки этого файла.");

if( jfc_o.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

JFileChooser jfc_s = new JFileChooser();

jfc_s.setDialogTitle("Как сохранить расшифрованый файл?");

if( jfc_s.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {

CodingFiles cf = new CodingFiles();

FileInputStream fis = new FileInputStream((jfc_o.getSelectedFile()).getAbsolutePath());

ObjectInputStream oin = new ObjectInputStream(fis);

SecretKey ts = (SecretKey) oin.readObject();

cf.iniCoding(ts);

if(cf.fileDecode((jfc.getSelectedFile()).getAbsolutePath(), (jfc_s.getSelectedFile()).getAbsolutePath()))

{

JOptionPane.showMessageDialog(new JButton("Ok"), "Файл расшифрован успешно!","Поздравляем!", JOptionPane.WARNING_MESSAGE);

}

else

{

JOptionPane.showMessageDialog(new JButton("Ok"), "Файл не расшифрован! Возможно не подходящий ключ.","Что-то нето!", JOptionPane.WARNING_MESSAGE);

}

oin.close();

}

}

}

}catch(Exception e){}

}

if(evt.target.equals(bt_dsig))

{

try{

JFileChooser jfc = new JFileChooser();

jfc.setDialogTitle("Выберите файл для подписи.");

if( jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

if(DigitalSignature.CreateDigitalSignatureForFile((jfc.getSelectedFile()).getAbsolutePath()))

JOptionPane.showMessageDialog(new JButton("Ok"), "Файл подписан успешно! Вы можите найти файл с цифровой подписью и открытый ключ в каталоге с файлом.","Поздравляем!", JOptionPane.WARNING_MESSAGE);

else

JOptionPane.showMessageDialog(newJButton("Ok"), "Возник какойто эксепшен","Что-то пошло не так.!", JOptionPane.WARNING_MESSAGE);

}

}catch(Exception e){}

}

if(evt.target.equals(bt_testdsig))

{

try{

JFileChooser jfc = new JFileChooser();

jfc.setDialogTitle("Выберите файл для проверки подписи.");

if( jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

JFileChooser jfc_dg = new JFileChooser();

jfc_dg.setDialogTitle("Выберите файл с цифровой подписью.");

if( jfc_dg.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

JFileChooser jfc_key = new JFileChooser();

jfc_key.setDialogTitle("Выберите файл с открытым ключем.");

if( jfc_key.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

if(DigitalSignature.TestedByDigitalSignature((jfc.getSelectedFile()).getAbsolutePath(), (jfc_dg.getSelectedFile()).getAbsolutePath(), (jfc_key.getSelectedFile()).getAbsolutePath()))

JOptionPane.showMessageDialog(new JButton("Ok"), "Этот файл полностью соответствует этой цифровой подписи.","Поздравляем!", JOptionPane.WARNING_MESSAGE);

else

JOptionPane.showMessageDialog(new JButton("Ok"), "Этот файл либо небыл подписан этой подписью либо несанкционировано исправлен","Danger!!!", JOptionPane.WARNING_MESSAGE);

}

}

}

}catch(Exception e){}

}

}

return super.action(evt, arg1);

}

}


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
150547
рейтинг
icon
3156
работ сдано
icon
1368
отзывов
avatar
Математика
Физика
История
icon
145688
рейтинг
icon
5939
работ сдано
icon
2681
отзывов
avatar
Химия
Экономика
Биология
icon
102026
рейтинг
icon
2067
работ сдано
icon
1289
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
58 141 оценка star star star star star
среднее 4.9 из 5
ТюмГМУ
Работа выполнена в срок , без единого замечания и строго в соответствии с заданием. Исполн...
star star star star star
Томский политехнический университет
Сколько раз заказывал у этого человека рефераты, ни разу не возникало вопросов. Спасибо бо...
star star star star star
Рук
Огромное спасибо . Вы очень грамотный специалист .Всегда все работы делаете хорошо.
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Проект , решить задание 6 из файла

Другое, Управления профессиональным развитием государственного и муниципального служащего

Срок сдачи к 29 янв.

только что

Сделать 9 практических работ

Решение задач, Внутризоводской Транспорт

Срок сдачи к 31 янв.

только что

Контрольная работа

Контрольная, БЖД

Срок сдачи к 31 янв.

1 минуту назад

Сделать отчёт по практике

Отчет по практике, Графический Дизайнер

Срок сдачи к 28 янв.

2 минуты назад

Искусственный интеллект для жизни и учебы

Презентация, нет, информатика

Срок сдачи к 7 февр.

3 минуты назад

Участие бывших офицеров царской армии в Гражданской войне как на...

Презентация, история россии

Срок сдачи к 26 янв.

4 минуты назад
5 минут назад
5 минут назад

Заполнить таблицу

Другое, Управления профессиональным развитием государственного и муниципального служащего, государственное и

Срок сдачи к 29 янв.

5 минут назад

Контрольная, механика

Контрольная, механика

Срок сдачи к 31 янв.

5 минут назад

Выполнить таблицу

Другое, История России

Срок сдачи к 26 янв.

5 минут назад

Выполнить задание на фото

Другое, Организация технического контроля на производстве, управление качеством

Срок сдачи к 9 мар.

6 минут назад

Нужно написать выводы к 6 таблицам по финансовой теме.

Контрольная, финансы

Срок сдачи к 28 янв.

6 минут назад

Выполнить расчет

Курсовая, Проектирование фундаментов промышленного(общественного,жилого)здания, строительство

Срок сдачи к 21 февр.

6 минут назад

Проложить 2 маршрута

Другое, Транспортная логистика

Срок сдачи к 28 янв.

7 минут назад

Курсовая

Курсовая, дошкольная педагогика

Срок сдачи к 7 февр.

8 минут назад

Прошу Вас переделать курсовую работу под мой вариант

Курсовая, Теория механизмов и машин

Срок сдачи к 29 янв.

10 минут назад

Essay: "Is computer the greatest evil of our time?"

Эссе, Английский язык

Срок сдачи к 26 янв.

10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно