From 2d20df2c4f9fb392ffb31bc9c0fa00a5e93d506f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz> Date: Tue, 4 May 2021 15:05:13 +0200 Subject: [PATCH] Use CipherInput(Output)Stream for RSA Cipher --- .gitignore | 1 + pom.enc | Bin 0 -> 3472 bytes pom.txt | 89 ++++++++++++++++++ pom.xml | 41 ++++---- .../java/java2/koz01/lab13/Lab13Decrypt.java | 50 +++++----- .../java/java2/koz01/lab13/Lab13Encrypt.java | 14 +-- .../lab13/NoClosingFilterInputStream.java | 18 ++++ .../lab13/NoClosingFilterOutputStream.java | 18 ++++ .../java2/koz01/lab13/OutputStreamApp.java | 42 +++++++++ src/main/java/module-info.java | 1 + 10 files changed, 226 insertions(+), 48 deletions(-) create mode 100644 pom.enc create mode 100644 pom.txt create mode 100644 src/main/java/java2/koz01/lab13/NoClosingFilterInputStream.java create mode 100644 src/main/java/java2/koz01/lab13/NoClosingFilterOutputStream.java create mode 100644 src/main/java/java2/koz01/lab13/OutputStreamApp.java diff --git a/.gitignore b/.gitignore index 1ccc1d3..f1bf236 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ derby.log /db/ /output/ +/keys.rsa diff --git a/pom.enc b/pom.enc new file mode 100644 index 0000000000000000000000000000000000000000..af311df8b979876ecbaf39c812da821adc49625d GIT binary patch literal 3472 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 Qtz<hZAZU%Ij~3(q53owT4gdfE literal 0 HcmV?d00001 diff --git a/pom.txt b/pom.txt new file mode 100644 index 0000000..3948263 --- /dev/null +++ b/pom.txt @@ -0,0 +1,89 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>java2.koz01</groupId> + <artifactId>lab13</artifactId> + <version>0.0.1-SNAPSHOT</version> + <packaging>jar</packaging> + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>15</maven.compiler.source> + <maven.compiler.target>15</maven.compiler.target> + <maven.compiler.version>3.8.1</maven.compiler.version> + <javafx.version>15.0.1</javafx.version> + <junit.version>5.7.1</junit.version> + <log4j.version>2.14.1</log4j.version> + <lombok.version>1.18.20</lombok.version> + </properties> + <dependencies> + <dependency> + <groupId>org.openjfx</groupId> + <artifactId>javafx-controls</artifactId> + <version>${javafx.version}</version> + </dependency> + <dependency> + <groupId>org.openjfx</groupId> + <artifactId>javafx-fxml</artifactId> + <version>${javafx.version}</version> + </dependency> + <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <version>${junit.version}</version> + <scope>test</scope> + </dependency> + <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>${junit.version}</version> + <scope>test</scope> + </dependency> + <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params --> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-params</artifactId> + <version>${junit.version}</version> + <scope>test</scope> + </dependency> + <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + <scope>provided</scope> + </dependency> + <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + <version>${log4j.version}</version> + </dependency> + <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>${log4j.version}</version> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>${maven.compiler.version}</version> + <configuration> + <annotationProcessorPaths> + <path> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + </path> + </annotationProcessorPaths> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/pom.xml b/pom.xml index 3948263..764e23e 100644 --- a/pom.xml +++ b/pom.xml @@ -50,40 +50,47 @@ </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>${lombok.version}</version> - <scope>provided</scope> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --> <dependency> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-api</artifactId> - <version>${log4j.version}</version> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + <version>${log4j.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --> <dependency> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-core</artifactId> - <version>${log4j.version}</version> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>${log4j.version}</version> </dependency> + <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>2.8.0</version> + </dependency> + </dependencies> <build> <plugins> <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <version>${maven.compiler.version}</version> - <configuration> - <annotationProcessorPaths> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>${maven.compiler.version}</version> + <configuration> + <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> </annotationProcessorPaths> - </configuration> - </plugin> + </configuration> + </plugin> </plugins> </build> </project> diff --git a/src/main/java/java2/koz01/lab13/Lab13Decrypt.java b/src/main/java/java2/koz01/lab13/Lab13Decrypt.java index 1af91c7..c7ab5e6 100644 --- a/src/main/java/java2/koz01/lab13/Lab13Decrypt.java +++ b/src/main/java/java2/koz01/lab13/Lab13Decrypt.java @@ -1,3 +1,4 @@ + package java2.koz01.lab13; import java.io.FileInputStream; @@ -10,13 +11,13 @@ import java.security.KeyPair; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; -import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.CipherInputStream; -import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; +import org.apache.commons.io.input.BoundedInputStream; + import lombok.extern.log4j.Log4j2; @Log4j2 @@ -24,34 +25,35 @@ public class Lab13Decrypt { public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IOException, - InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException + InvalidKeySpecException { KeyPairLoader keyPairLoader = new KeyPairLoader(); KeyPair kp = keyPairLoader.load("keys.rsa"); - - - InputStream nis = new FileInputStream(args[0]); - Cipher aCipher = Cipher.getInstance("RSA"); - aCipher.init(Cipher.DECRYPT_MODE, kp.getPrivate()); - byte[] encrypted = new byte[256]; - nis.read(encrypted); - byte[] keyData = aCipher.doFinal(encrypted); - SecretKeySpec skp = new SecretKeySpec(keyData, "AES"); - - Cipher cipher = Cipher.getInstance("AES"); - cipher.init(Cipher.DECRYPT_MODE, skp); - - - try (InputStream is = new CipherInputStream(nis, - cipher); - OutputStream os = new FileOutputStream(args[1])) + try (InputStream nis = new FileInputStream(args[0]); + OutputStream os = new FileOutputStream(args[1])) { - byte [] buffer = new byte[1024]; - int len; - while (-1 != (len = is.read(buffer))) { - os.write(buffer, 0, len); + Cipher cipher = Cipher.getInstance("AES"); + Cipher aCipher = Cipher.getInstance("RSA"); + aCipher.init(Cipher.DECRYPT_MODE, kp.getPrivate()); + try (InputStream rsaIs = new CipherInputStream( + new NoClosingFilterInputStream(new BoundedInputStream(nis, 256)), + aCipher)) + { + byte[] keyData = new byte[32]; + rsaIs.read(keyData); + SecretKeySpec skp = new SecretKeySpec(keyData, "AES"); + cipher.init(Cipher.DECRYPT_MODE, skp); + } + try (InputStream is = new CipherInputStream( + new NoClosingFilterInputStream(nis), cipher);) + { + byte[] buffer = new byte[1024]; + int len; + while (-1 != (len = is.read(buffer))) { + os.write(buffer, 0, len); + } } } log.info("decrypted"); diff --git a/src/main/java/java2/koz01/lab13/Lab13Encrypt.java b/src/main/java/java2/koz01/lab13/Lab13Encrypt.java index 6acb767..46ae590 100644 --- a/src/main/java/java2/koz01/lab13/Lab13Encrypt.java +++ b/src/main/java/java2/koz01/lab13/Lab13Encrypt.java @@ -10,10 +10,8 @@ import java.security.KeyPair; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; -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; @@ -25,7 +23,7 @@ public class Lab13Encrypt { public static void main(String[] args) throws NoSuchAlgorithmException, IOException, NoSuchPaddingException, InvalidKeyException, - InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException + InvalidKeySpecException { KeyPairLoader keyPairLoader = new KeyPairLoader(); @@ -54,10 +52,12 @@ public class Lab13Encrypt { Cipher aCipher = Cipher.getInstance("RSA"); aCipher.init(Cipher.ENCRYPT_MODE, kp.getPublic()); log.info("size of key {}", sk.getEncoded().length); - byte[] encrypted = aCipher.doFinal(sk.getEncoded()); - log.info("size of encrypted {}", encrypted.length); - nos.write(encrypted); - nos.flush(); + + try (OutputStream rsaOs = new CipherOutputStream( + new NoClosingFilterOutputStream(nos), aCipher)) + { + rsaOs.write(sk.getEncoded()); + } int len; while (-1 != (len = is.read(buffer))) { os.write(buffer, 0, len); diff --git a/src/main/java/java2/koz01/lab13/NoClosingFilterInputStream.java b/src/main/java/java2/koz01/lab13/NoClosingFilterInputStream.java new file mode 100644 index 0000000..9966243 --- /dev/null +++ b/src/main/java/java2/koz01/lab13/NoClosingFilterInputStream.java @@ -0,0 +1,18 @@ +package java2.koz01.lab13; + +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +class NoClosingFilterInputStream extends FilterInputStream { + + public NoClosingFilterInputStream(InputStream in) { + super(in); + } + + @Override + public void close() throws IOException { + + } + +} diff --git a/src/main/java/java2/koz01/lab13/NoClosingFilterOutputStream.java b/src/main/java/java2/koz01/lab13/NoClosingFilterOutputStream.java new file mode 100644 index 0000000..eeef692 --- /dev/null +++ b/src/main/java/java2/koz01/lab13/NoClosingFilterOutputStream.java @@ -0,0 +1,18 @@ +package java2.koz01.lab13; + +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +class NoClosingFilterOutputStream extends FilterOutputStream { + + public NoClosingFilterOutputStream(OutputStream out) { + super(out); + } + + @Override + public void close() throws IOException { + flush(); + } + +} diff --git a/src/main/java/java2/koz01/lab13/OutputStreamApp.java b/src/main/java/java2/koz01/lab13/OutputStreamApp.java new file mode 100644 index 0000000..f321e10 --- /dev/null +++ b/src/main/java/java2/koz01/lab13/OutputStreamApp.java @@ -0,0 +1,42 @@ +package java2.koz01.lab13; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.security.InvalidKeyException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; + +import javax.crypto.Cipher; +import javax.crypto.CipherOutputStream; +import javax.crypto.NoSuchPaddingException; + +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class OutputStreamApp { + + public static void main(String[] args) throws NoSuchAlgorithmException, + NoSuchPaddingException, FileNotFoundException, IOException, + InvalidKeyException + { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); + kpg.initialize(2048); + KeyPair kp = kpg.generateKeyPair(); + + log.info("private: {}", kp.getPrivate()); + log.info("public: {}", kp.getPublic()); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, kp.getPublic()); + for (int i = 200; i < 257; i++) { + try (OutputStream os = new CipherOutputStream(new FileOutputStream("out" + + i + ".enc"), cipher)) + { + byte[] data = new byte[i]; + os.write(data); + } + } + } +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index b9bed9f..415a9ea 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -3,4 +3,5 @@ module java2.koz01.lab13 { requires lombok; requires org.apache.logging.log4j; + requires org.apache.commons.io; } \ No newline at end of file -- GitLab