From 2450203944204a4d37cec232195a0af98f78b9ce Mon Sep 17 00:00:00 2001
From: koz01 <koz01@PCCPIT1V203-040.msad.vsb.cz>
Date: Tue, 3 May 2022 14:22:45 +0200
Subject: [PATCH] Laboratory work

---
 src/main/java/java2/koz01/lab12/Prog1.java | 25 +++++++
 src/main/java/java2/koz01/lab12/Prog2.java | 36 ++++++++++
 src/main/java/java2/koz01/lab12/Prog3.java | 36 ++++++++++
 src/main/java/java2/koz01/lab12/Prog4.java | 81 ++++++++++++++++++++++
 4 files changed, 178 insertions(+)
 create mode 100644 src/main/java/java2/koz01/lab12/Prog1.java
 create mode 100644 src/main/java/java2/koz01/lab12/Prog2.java
 create mode 100644 src/main/java/java2/koz01/lab12/Prog3.java
 create mode 100644 src/main/java/java2/koz01/lab12/Prog4.java

diff --git a/src/main/java/java2/koz01/lab12/Prog1.java b/src/main/java/java2/koz01/lab12/Prog1.java
new file mode 100644
index 0000000..b94d969
--- /dev/null
+++ b/src/main/java/java2/koz01/lab12/Prog1.java
@@ -0,0 +1,25 @@
+package java2.koz01.lab12;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+
+public class Prog1 {
+
+	public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
+		KeyGenerator kg = KeyGenerator.getInstance("AES");
+		kg.init(256);
+		SecretKey sk = kg.generateKey();
+
+		try (OutputStream os = Files.newOutputStream(Paths.get(args[0]))) {
+			byte[] data = sk.getEncoded();
+			os.write(data);
+		}
+	}
+
+}
diff --git a/src/main/java/java2/koz01/lab12/Prog2.java b/src/main/java/java2/koz01/lab12/Prog2.java
new file mode 100644
index 0000000..c28a321
--- /dev/null
+++ b/src/main/java/java2/koz01/lab12/Prog2.java
@@ -0,0 +1,36 @@
+package java2.koz01.lab12;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.Cipher;
+import javax.crypto.CipherOutputStream;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+
+public class Prog2 {
+	public static void main(String[] args)
+			throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException {
+		byte[] data = Files.readAllBytes(Paths.get(args[1])); // nacist ze souboru
+
+		SecretKey sk = new SecretKeySpec(data, "AES");
+		Cipher cipher = Cipher.getInstance("AES");
+
+		cipher.init(Cipher.ENCRYPT_MODE, sk);
+		try (OutputStream os = new CipherOutputStream(Files.newOutputStream(Paths.get(args[2])), cipher);
+				InputStream is = Files.newInputStream(Paths.get(args[0]))) {
+			byte[] buffer = new byte[1024];
+			int len;
+			while (-1 != (len = is.read(buffer))) {
+				os.write(buffer, 0, len);
+			}
+		}
+
+	}
+}
diff --git a/src/main/java/java2/koz01/lab12/Prog3.java b/src/main/java/java2/koz01/lab12/Prog3.java
new file mode 100644
index 0000000..fa9b1ea
--- /dev/null
+++ b/src/main/java/java2/koz01/lab12/Prog3.java
@@ -0,0 +1,36 @@
+package java2.koz01.lab12;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.Cipher;
+import javax.crypto.CipherInputStream;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+
+public class Prog3 {
+	public static void main(String[] args)
+			throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException {
+		byte[] data = Files.readAllBytes(Paths.get(args[1])); // nacist ze souboru
+
+		SecretKey sk = new SecretKeySpec(data, "AES");
+		Cipher cipher = Cipher.getInstance("AES");
+
+		cipher.init(Cipher.DECRYPT_MODE, sk);
+		try (OutputStream os = Files.newOutputStream(Paths.get(args[2]));
+				InputStream is = new CipherInputStream(Files.newInputStream(Paths.get(args[0])), cipher)) {
+			byte[] buffer = new byte[1024];
+			int len;
+			while (-1 != (len = is.read(buffer))) {
+				os.write(buffer, 0, len);
+			}
+		}
+
+	}
+}
diff --git a/src/main/java/java2/koz01/lab12/Prog4.java b/src/main/java/java2/koz01/lab12/Prog4.java
new file mode 100644
index 0000000..f2f4eb4
--- /dev/null
+++ b/src/main/java/java2/koz01/lab12/Prog4.java
@@ -0,0 +1,81 @@
+package java2.koz01.lab12;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigInteger;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.InvalidKeyException;
+import java.security.KeyFactory;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.RSAPrivateKeySpec;
+import java.security.spec.RSAPublicKeySpec;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.CipherOutputStream;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.KeyGenerator;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.SecretKey;
+
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+public class Prog4 {
+
+	public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException, IOException,
+			NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
+		KeyGenerator kgaes = KeyGenerator.getInstance("AES");
+		kgaes.init(256);
+		SecretKey sk = kgaes.generateKey();
+
+		KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");
+		kg.initialize(4096);
+		KeyPair kp = kg.generateKeyPair();
+
+		KeyFactory kf = KeyFactory.getInstance("RSA");
+		RSAPublicKeySpec pub = kf.getKeySpec(kp.getPublic(), RSAPublicKeySpec.class);
+		RSAPrivateKeySpec priv = kf.getKeySpec(kp.getPrivate(), RSAPrivateKeySpec.class);
+
+		writeToFile(args[1] + ".pub", pub.getModulus(), pub.getPublicExponent());
+		writeToFile(args[1] + ".priv", priv.getModulus(), priv.getPrivateExponent());
+
+		Cipher cipher = Cipher.getInstance("RSA");
+
+		cipher.init(Cipher.ENCRYPT_MODE, kp.getPublic());
+		byte[] encrypted_key = cipher.doFinal(sk.getEncoded());
+
+		Cipher cipher2 = Cipher.getInstance("AES");
+
+		cipher2.init(Cipher.ENCRYPT_MODE, sk);
+
+
+		try (OutputStream os = new CipherOutputStream(Files.newOutputStream(Paths.get(args[2])), cipher2);
+				InputStream is = Files.newInputStream(Paths.get(args[0]))) {
+			byte[] buffer = new byte[1024];
+			int len;
+			while (-1 != (len = is.read(buffer))) {
+				os.write(buffer, 0, len);
+			}
+		}
+		try (OutputStream os = Files.newOutputStream(Paths.get(args[3]))) {
+			os.write(encrypted_key);
+		}
+	}
+
+	private static void writeToFile(String string, BigInteger modulus, BigInteger exponent) throws IOException {
+		try (BufferedWriter bw = Files.newBufferedWriter(Paths.get(string))) {
+			bw.write(modulus.toString());
+			bw.newLine();
+			bw.write(exponent.toString());
+		}
+
+	}
+
+}
-- 
GitLab