Реферат по предмету "Информатика, программирование"


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

/>/>/>Реферат
Курсовая работа содержит 37 страницы,6 рисунков, 4 приложения, включая дампы экрана и схемы и код приложения. При разработкеиспользовалось 10 источников.
Основным объектом исследованияявляется проектирование java — приложения использующего набор стандартных библиотек(JDK security API). Для реализации шифровки, дешифровки файлов, а также для созданияи проверки цифровой подписи. Данные библиотеки в настоящий момент широко используютсяв большинстве крупных и нуждающихся в защите приложений. Автор не выдвигает новыхподходов к реализации алгоритмов шифрования и оформлению программы. Основной упорделается на стабильность и надежность работы программы. С точки зрения пользователяданная программа имеет учебный и коммерческий характер.
Ключевые слова: КРИПТОГРАФИЯ,АЛГОРИТМЫ, ЦИФРОВАЯ ПОДПИСЬ, ПУБЛИЧНЫЙ КЛЮЧ, JAVA, JDK SECURITY API

Содержание
Введение
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.*):
X509EncodedKeySpecpubKeySpec = 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, который в качестве параметра получает имя криптографического алгоритма шифрования.В нашем случае:
Cipher chr = 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.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 andpublic 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-generatedmethod 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-generatedconstructor 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, Stringfilename) {
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(Stringputh)
{
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);
BufferedInputStreambufin = 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(Stringputh, String sign_puth, String pubkey_puth){
try{
byte[] encKey = readFromFile(pubkey_puth);
X509EncodedKeySpecpubKeySpec = 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);
BufferedInputStreambufin = 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 FInterfaceFormextends JFrame{
/**
*
*/
private static finallong serialVersionUID = 1L;
Button bt_enc = newButton(«Закодировать файл»);
Button bt_dec = newButton(«Расшифровать файл»);
Button bt_dsig = newButton(«Подписать файл»);
Button bt_testdsig= new Button(«Проверить цифровую подпись»);
public FInterfaceForm(){
// TODO Auto-generatedconstructor stub
this.setLayout(null);
this.setBounds(200,200, 420, 90);
this.setTitle(«Javasercurity»);
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(Eventevt, Object arg1) {
// TODO Auto-generatedmethod stub
if(evt.target instanceofButton)
{
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 = newCodingFiles();
SecretKey sk = cf.initCoding();
FileOutputStream fos= new FileOutputStream((jfc_s_key.getSelectedFile()).getAbsolutePath());
ObjectOutputStreamoos = new ObjectOutputStream(fos);
oos.writeObject(sk);
oos.flush();
oos.close();
if(cf.fileEncode((jfc.getSelectedFile()).getAbsolutePath(),(jfc_s.getSelectedFile()).getAbsolutePath()))
JOptionPane.showMessageDialog(newJButton(«Ok»), «Файл закодирован успешно!»,«Поздравляем!»,JOptionPane.WARNING_MESSAGE);
else
JOptionPane.showMessageDialog(newJButton(«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 = newCodingFiles();
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(newJButton(«Ok»), «Файл расшифрован успешно!»,«Поздравляем!»,JOptionPane.WARNING_MESSAGE);
}
else
{
JOptionPane.showMessageDialog(newJButton(«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(newJButton(«Ok»), «Файл подписан успешно! Вы можите найти файл с цифровой подписью и открытый ключв каталоге с файлом.»,«Поздравляем!», JOptionPane.WARNING_MESSAGE);
else
JOptionPane.showMessageDialog(new JButton(«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(newJButton(«Ok»), «Этот файл полностью соответствует этой цифровой подписи.»,«Поздравляем!»,JOptionPane.WARNING_MESSAGE);
else
JOptionPane.showMessageDialog(newJButton(«Ok»), «Этот файл либо небыл подписан этой подписью либонесанкционировано исправлен»,«Danger!!!», JOptionPane.WARNING_MESSAGE);
}
}
}
}catch(Exception e){}
}
}
return super.action(evt,arg1);
}
}


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.