Реализация алгоритма симметрического шифрования в java на примере алгоритма DES
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
? (Рис. 3.1) выбрать пункт меню Проверить цифровую подпись. После чего необходимо указать путь к проверяемому файлу, путь к файлу iифровой подписью и файл с публичным ключом. В случае корректного указания всех файлов и неизменности проверяемого файла выдается сообщение, что верификация прошла успешно. Если хотя бы один бит в одном из этих файлов был модифицирован, выдается уведомление о несанкционированном доступе.
Перечень ссылок
1. Введение в криптографию / Под общ. ред. В.В.Ященко. - М.:МЦНМО, ЧеРо, 1998. - 272c.
. А.Никитин, Универсальные криптографические интерфейсы, Защита информации, Конфидент, N5, 1997.
. М.Могран, Java 2. Руководство разработчика, Пер. с англ. : Уч. пос. - М.: Вильямс, 2000. - 720c. : ил.
4. Vipul Ved Prakash, Benjamin Trott, Asymmetric Cryptography in Perl, O'Reilly, 2001.
. R.Coleridge, The Cryptography API, or How to Keep a Secret, MSDN, 1996.
. D.Esposito, Supporting CryptoAPI in Real-World Applications, MSDN, 1997.
.
. S.K.Parmar, An introduction to security, Fred Cohen &Associates, 2000.
. 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.
. W.Diffie and M.E.Hellman, New directions in cryptograpgy, IEEE Trans.Inf.Theory, vol.IT-22, N6, p.644-654, Nov. 1976.
. A.Menezes, P.van Oorschot, S.Vanstone, Handbook of applied cryptography, CRC Press, 1996.
Приложение А
Код класса my_java_sec
public class my_java_sec {
@SuppressWarnings("deprecation")static void main(String[] args){
// TODO Auto-generated method stubfif = new FInterfaceForm();.show();
}
}
Приложение Б
Код класса coding_filesjava.io.FileInputStream;java.io.FileOutputStream;javax.crypto.Cipher;javax.crypto.KeyGenerator;javax.crypto.SecretKey;class CodingFiles {ecipher;
Cipher dcipher;
CodingFiles() {
// TODO Auto-generated constructor stub
}SecretKey initCoding()
{{key = KeyGenerator.getInstance("DES").generateKey();= Cipher.getInstance("DES");= Cipher.getInstance("DES");.init(Cipher.ENCRYPT_MODE, key);.init(Cipher.DECRYPT_MODE, key);key;
}(Exception e)
{
}null;
}void iniCoding(SecretKey key)
{{= Cipher.getInstance("DES");= Cipher.getInstance("DES");.init(Cipher.ENCRYPT_MODE, key);.init(Cipher.DECRYPT_MODE, key);
}(Exception e)
{
}
}boolean fileEncode(String sourse,String result)
{{inFile = new FileInputStream(sourse);bytesAvailable = inFile.available();[] bytesReaded = new byte[bytesAvailable];.read(bytesReaded,0,bytesAvailable);.close();[] br_enc = ecipher.doFinal(bytesReaded);outFile = new FileOutputStream(result);.write(br_enc);.close();true;
}(Exception e)
{}false;
}boolean fileDecode(String sourse,String result)
{{enc_inFile = new FileInputStream(sourse);enc_bytesAvailable = enc_inFile.available();[] enc_bytesReaded = new byte[enc_bytesAvailable];_inFile.read(enc_bytesReaded,0,enc_bytesAvailable);_inFile.close();[] br_dec =dcipher.doFinal(enc_bytesReaded);dec_outFile = new FileOutputStream(result);_outFile.write(br_dec);_outFile.close();true;
}(Exception e)
{}false;
}
}
Приложение В
Код класса DigitalSignaturejava.io.BufferedInputStream;java.io.FileInputStream;java.io.FileOutputStream;java.security.KeyFactory;java.security.KeyPair;java.security.KeyPairGenerator;java.security.PrivateKey;java.security.PublicKey;java.security.SecureRandom;java.security.Signature;java.security.spec.X509EncodedKeySpec;class DigitalSignature {static void saveToFile (byte[] info, String filename) {{fos = new FileOutputStream(filename);.write(info);.close();
}(Exception e){}
}static byte[] readFromFile (String fileName) {[] info;{fis = new FileInputStream(fileName);= new byte[fis.available()];.read(info);.close();
}(Exception e) {info = new byte[0];}(info);
}static boolean CreateDigitalSignatureForFile(String puth)
{
{keyGen = KeyPairGenerator.getInstance("DSA", "SUN");random = SecureRandom.getInstance("SHA1PRNG", "SUN");.initialize(1024, random);pair = keyGen.generateKeyPair();priv = pair.getPrivate();pub = pair.getPublic();dsa = Signature.getInstance("SHA1withDSA", "SUN");.initSign(priv);fis = new FileInputStream(puth);bufin = new BufferedInputStream(fis);[] buffer = new byte[1024];len;(bufin.available() != 0)
{= bufin.read(buffer);.update(buffer, 0, len);
}.close();[] realSig = dsa.sign();(realSig,puth+".sig");[] key = pub.getEncoded();(key,puth+".pubkey");
//byte[] priv_key = priv.getEncoded();
//saveToFile (priv_key,"privkey_"+puth);true;
}(Exception e){}false;
}static boolean TestedByDigitalSignature(String puth, String sign_puth, String pubkey_puth){{[] encKey = readFromFile(pubkey_puth);EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);keyFactory = KeyFactory.getInstance("DSA", "SUN");pubKey = keyFactory.generatePublic(pubKeySpec);[] sigToVerify = readFromFile(sign_puth);sig = Signature.getInstance("SHA1withDSA", "SUN");.initVerify(pubKey);datafis = new FileInputStream(puth);bufin = new BufferedInputStream(datafis);[] buffer = new byte[1024];len;(bufin.available() != 0)
{= bufin.read(buffer);.update(buffer, 0, len);
}.close();verifies = sig.verify(sigToVerify);verifies;
}(Exception e){}false;
}
}
Приложение Г
Код класса FInterfaceFormjava.awt.Button;java.awt.Event;java.io.FileInputStream;java.io.FileOutputStream;java.io.ObjectInputStream;java.io.ObjectOutputStream;javax.crypto.SecretKey;javax.swing.JButton;javax.swing.JFileChooser;javax.swing.JFrame;javax.swing.JOptionPane;class FInterfaceForm extends JFrame{
/**
*
*/static final long serialVersionUID = 1L;bt_enc = new Button("Закодировать файл");bt_dec = new Button("Расшифровать файл");bt_dsig = new Button("Подписать файл");bt_testdsig = new Button("Проверить цифровую подпись");FInterfaceForm() {
// TODO Auto-generated constructor stub.setLayout(null);.setBounds(200, 200, 420, 90);.setTitle("Java sercurity");_enc.setBounds(0, 0, 200, 25);_dec.setBounds(200, 0, 200, 25);_dsig.setBounds(0, 25, 200, 25);_testdsig.setBounds(200, 25, 200, 25);.add(bt_enc);.add(bt_dec);.add(bt_dsig);.add(bt_testdsig);
}
@SuppressWarnings("deprecation")
@Overrideboolean action(Event evt, Object arg1) {
// TODO Auto-generated method stub(evt.target instanceof Button)
{(evt.target.equals(bt_enc))
{{jfc = new JFileChooser();.setDialogTitle("Выберите файл для кодирования");
if( jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {jfc_s = new JFileChooser();_s.setDialogTitle("Как сохранить файл?");
if( jfc_s.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {jfc_s_key = new JFileChooser();_s_key.setDialogTitle("Как сохранить ключ?");
if( jfc_s_key.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {cf = new CodingFiles();sk = cf.initCoding();fos = new FileOutputStream((jfc_s_key.getSelectedFile()).getAbsolutePath());oos = new ObjectOutputStream(fos);.writeObject(sk);.flush();.close();(cf.fileEncode((jfc.getSelectedFile()).getAbsolutePath(), (jfc_s.getSelectedFile()).getAbsolutePath())).showMessageDialog(new JButton("Ok"), "Файл закодирован успешно!","Поздравляем!", JOptionPane.WARNING_MESSAGE);.showMessageDialog(new JButton("Ok"), "Произошла ошибка при кодировании файла!","Что-то не так!", JOptionPane.WARNING_MESSAGE);
}
}
}
}catch(Exception e){}
}(evt.target.equals(bt_dec))
{{jfc = new JFileChooser();.setDialogTitle("Выберите файл для расшифровки.");( jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {jfc_o = new JFileChooser();_o.setDialogTitle("Выбирете ключ для расшифровки этого файла.");
if( jfc_o.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {jfc_s = new JFileChooser();_s.setDialogTitle("Как сохранить расшифрованый файл?");
if( jfc_s.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {cf = new CodingFiles();fis = new FileInputStream((jfc_o.getSelectedFile())