From 9af0e341e4bcbbc455bc7df4af3c54c1d77bde09 Mon Sep 17 00:00:00 2001 From: kozhanov Date: Wed, 5 Dec 2018 11:45:38 +0400 Subject: [PATCH 1/5] Encode & Decode --- .idea/misc.xml | 2 +- src/crypto/Crypto.java | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index a165cb3..0c4841a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index 51d57b7..c7aadaf 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -5,6 +5,34 @@ public class Crypto { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); - // write your code here + String mode = scanner.nextLine(); + String text = scanner.nextLine(); + int key = Integer.parseInt(scanner.nextLine()); + String alph = "abcdefghijklmnopqrstuvwxyz"; + String enctext = ""; + switch (mode) { + case "enc": + for (char c : text.toLowerCase().toCharArray()) { + int i = alph.indexOf(c); + if (i != -1) { + enctext += alph.charAt(i + key < alph.length() ? i + key : i + key - alph.length()); + } else { + enctext += c; + } + } + break; + case "dec": + for (char c : text.toLowerCase().toCharArray()) { + int i = alph.indexOf(c); + if (i != -1) { + enctext += alph.charAt(i - key > 0 ? i - key : i - key + alph.length()); + } else { + enctext += c; + } + } + break; + } + System.out.println(enctext); + } } From f37d09d6c19d7a6b7815ef6ee211671b62020236 Mon Sep 17 00:00:00 2001 From: kozhanov Date: Wed, 5 Dec 2018 11:58:35 +0400 Subject: [PATCH 2/5] Encode & Decode --- src/crypto/Crypto.java | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index c7aadaf..3f0e4a8 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -8,31 +8,17 @@ public static void main(String[] args) { String mode = scanner.nextLine(); String text = scanner.nextLine(); int key = Integer.parseInt(scanner.nextLine()); - String alph = "abcdefghijklmnopqrstuvwxyz"; + System.out.println(encode(mode, text, key)); + } + + private static String encode(String mode, String text, int key) + { String enctext = ""; - switch (mode) { - case "enc": - for (char c : text.toLowerCase().toCharArray()) { - int i = alph.indexOf(c); - if (i != -1) { - enctext += alph.charAt(i + key < alph.length() ? i + key : i + key - alph.length()); - } else { - enctext += c; - } - } - break; - case "dec": - for (char c : text.toLowerCase().toCharArray()) { - int i = alph.indexOf(c); - if (i != -1) { - enctext += alph.charAt(i - key > 0 ? i - key : i - key + alph.length()); - } else { - enctext += c; - } - } - break; + for (char c : text.toCharArray()) { + enctext += (char)((int)c+ (mode.equals("enc")?5:mode.equals("dec")?-5:0)); } - System.out.println(enctext); - + return enctext; } + + } From 91f199d1d7988b19ee84d1a51c96788bad19d2ce Mon Sep 17 00:00:00 2001 From: kozhanov Date: Wed, 5 Dec 2018 12:55:43 +0400 Subject: [PATCH 3/5] Encode & Decode command prompt --- src/crypto/Crypto.java | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index 3f0e4a8..68ae112 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -1,13 +1,30 @@ package crypto; -import java.util.Scanner; - public class Crypto { public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - String mode = scanner.nextLine(); - String text = scanner.nextLine(); - int key = Integer.parseInt(scanner.nextLine()); + String mode = ""; + String text = ""; + int key = 0; + for (int i = 0; i < args.length; i++) { + switch (args[i]) + { + case "-mode": + if (i+1 < args.length) + mode = args[i+1]; + break; + case "-key": + if (i+1 < args.length) + key = Integer.parseInt(args[i+1]); + break; + case "-data": + if (i+1 < args.length) + text = args[i+1]; + break; + } + } + + if (mode.isEmpty()||text.isEmpty()) return; + System.out.println(encode(mode, text, key)); } @@ -15,7 +32,7 @@ private static String encode(String mode, String text, int key) { String enctext = ""; for (char c : text.toCharArray()) { - enctext += (char)((int)c+ (mode.equals("enc")?5:mode.equals("dec")?-5:0)); + enctext += (char)((int)c+ (mode.equals("enc")?key:mode.equals("dec")?key*-1:0)); } return enctext; } From 7882ed58d8e26447ac7bbb53835161427e0721bb Mon Sep 17 00:00:00 2001 From: kozhanov Date: Wed, 5 Dec 2018 15:02:23 +0400 Subject: [PATCH 4/5] Encode & Decode command prompt and files --- src/crypto/Crypto.java | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index 68ae112..cfd8fc6 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -1,9 +1,15 @@ package crypto; -public class Crypto { - public static void main(String[] args) { +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +public class Crypto { + public static void main(String[] args) throws IOException { String mode = ""; - String text = ""; + String filein = ""; + String fileout = ""; int key = 0; for (int i = 0; i < args.length; i++) { switch (args[i]) @@ -16,26 +22,38 @@ public static void main(String[] args) { if (i+1 < args.length) key = Integer.parseInt(args[i+1]); break; - case "-data": + case "-in": + if (i+1 < args.length) + filein = args[i+1]; + break; + case "-out": if (i+1 < args.length) - text = args[i+1]; + fileout = args[i+1]; break; } } - if (mode.isEmpty()||text.isEmpty()) return; + if (mode.isEmpty()||filein.isEmpty()||fileout.isEmpty()||!new File(filein).exists()) return; + + FileInputStream fi = new FileInputStream(filein); + FileOutputStream fo = new FileOutputStream(fileout); + + while (fi.available() > 0 ) + { + int data = fi.read(); + fo.write(data+ (mode.equals("enc")?key:mode.equals("dec")?key*-1:0)); + } - System.out.println(encode(mode, text, key)); } - private static String encode(String mode, String text, int key) + /*private static String encode(String mode, String text, int key) { String enctext = ""; for (char c : text.toCharArray()) { enctext += (char)((int)c+ (mode.equals("enc")?key:mode.equals("dec")?key*-1:0)); } return enctext; - } + }*/ } From 016760d208ede63859c5b1ccda44a4c0d5b892cb Mon Sep 17 00:00:00 2001 From: kozhanov Date: Fri, 7 Dec 2018 15:37:30 +0400 Subject: [PATCH 5/5] Encode & Decode command prompt and files & alg --- src/crypto/Crypto.java | 90 +++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 19 deletions(-) diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index cfd8fc6..e79a62f 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -5,12 +5,68 @@ import java.io.FileOutputStream; import java.io.IOException; +interface ICrypto +{ + byte[] encrypt(byte[] data, String key); + byte[] decrypt(byte[] data, String key); +} + +class CryptoShift implements ICrypto +{ + @Override + public byte[] encrypt(byte[] data, String key) { + + String text = ""; + for (int i = 0; i < data.length; i++) { + text += (char)(data[i] + Integer.parseInt(key)); + } + return text.getBytes(); + } + @Override + public byte[] decrypt(byte[] data, String key) { + + String text = ""; + for (int i = 0; i < data.length; i++) { + text += (char)(data[i] - Integer.parseInt(key)); + } + return text.getBytes(); + } +} + +class Crypter +{ + private ICrypto alg; + + public Crypter(String alg) throws Exception + { + switch (alg.toLowerCase()) { + case "shift": + this.alg = new CryptoShift(); + break; + default: + throw new Exception("Invalid algorithm"); + } + } + + public byte[] crypt(byte[] data, String key, String mode) + { + if (mode.toLowerCase().equals("enc")) + return alg.encrypt(data, key); + if (mode.toLowerCase().equals("dec")) + return alg.decrypt(data, key); + return null; + } + +} + + public class Crypto { - public static void main(String[] args) throws IOException { + public static void main(String[] args) throws IOException, Exception { String mode = ""; String filein = ""; String fileout = ""; - int key = 0; + String alg = ""; + String key = ""; for (int i = 0; i < args.length; i++) { switch (args[i]) { @@ -20,7 +76,7 @@ public static void main(String[] args) throws IOException { break; case "-key": if (i+1 < args.length) - key = Integer.parseInt(args[i+1]); + key = args[i+1]; break; case "-in": if (i+1 < args.length) @@ -30,6 +86,10 @@ public static void main(String[] args) throws IOException { if (i+1 < args.length) fileout = args[i+1]; break; + case "-alg": + if (i+1 < args.length) + alg = args[i+1]; + break; } } @@ -38,22 +98,14 @@ public static void main(String[] args) throws IOException { FileInputStream fi = new FileInputStream(filein); FileOutputStream fo = new FileOutputStream(fileout); - while (fi.available() > 0 ) - { - int data = fi.read(); - fo.write(data+ (mode.equals("enc")?key:mode.equals("dec")?key*-1:0)); - } - - } - - /*private static String encode(String mode, String text, int key) - { - String enctext = ""; - for (char c : text.toCharArray()) { - enctext += (char)((int)c+ (mode.equals("enc")?key:mode.equals("dec")?key*-1:0)); - } - return enctext; - }*/ + byte[] data = new byte[fi.available()]; + fi.read(data,0,fi.available()); + Crypter cr = new Crypter(alg); + byte[] cryptodata = cr.crypt(data, key, mode); + if (cryptodata == null) System.out.println("Invalid mode"); + fo.write(cryptodata); + } } +