· 5 years ago · Mar 19, 2020, 10:00 AM
1package knjigazis;
2import java.io.File;
3import java.io.FileInputStream;
4import java.io.FileNotFoundException;
5import java.io.FileOutputStream;
6import java.io.IOException;
7import java.nio.file.Files;
8import java.nio.file.Path;
9import java.nio.file.Paths;
10import java.nio.file.StandardOpenOption;
11import java.security.InvalidKeyException;
12import java.security.NoSuchAlgorithmException;
13import javax.crypto.Cipher;
14import javax.crypto.CipherInputStream;
15import javax.crypto.KeyGenerator;
16import javax.crypto.NoSuchPaddingException;
17import javax.crypto.SecretKey;
18import javax.crypto.spec.SecretKeySpec;
19public class AESsifraCFB16 {
20 public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, FileNotFoundException, IOException {
21 //Generisanje tajnog ključa
22 KeyGenerator kg = KeyGenerator.getInstance("AES");
23 SecretKey kljuc = kg.generateKey();
24 byte[] AESkljuc = kljuc.getEncoded();
25 SecretKeySpec specifikacijaKljuca = new SecretKeySpec(AESkljuc, "AES");
26
27 //CFB šifruje po 16 bitova u jednom taktu
28 Cipher sifra = Cipher.getInstance("AES/CFB16/PKCS5Padding");
29 sifra.init(Cipher.ENCRYPT_MODE, specifikacijaKljuca);
30 FileInputStream fis = new FileInputStream("moji_podaci.txt");
31 CipherInputStream cis = new CipherInputStream(fis, sifra);
32
33 //Upis šifrata u datoteku
34 File datoteka = new File("moji_podaci_sifrat.AES");
35 FileOutputStream fos = new FileOutputStream(datoteka);
36
37 //Broj bitova koji će biti prosesuiran u toku po jednom taktu
38 byte cipherText[]= new byte[16];
39 int i=0;
40 while((i=cis.read(cipherText))!= -1){
41 fos.write(cipherText,0,i);
42 }
43 System.out.println("Svi podaci iz toka su šifrovani!");
44
45 //Memorisanje ključa i IV-a
46 AESsifraCFB16.sacuvajIV(sifra.getIV(), "IV.txt");
47 AESsifraCFB16.sacuvajKljuc(specifikacijaKljuca.getEncoded(),"kljuc.txt");
48 }
49 //Metode za upis ključa i IV u datoteku
50 public static void sacuvajKljuc(byte kljuc[], String nazivDatoteke) throws IOException{
51 Path lokacija = Paths.get(nazivDatoteke);
52 Files.write(lokacija, kljuc, StandardOpenOption.CREATE_NEW);
53 }
54 public static void sacuvajIV(byte IV[], String nazivDatoteke) throws IOException{
55 Path lokacija = Paths.get(nazivDatoteke);
56 Files.write(lokacija, IV, StandardOpenOption.CREATE_NEW);
57 }
58}