diff --git a/.gitignore b/.gitignore index a1c2a23..bd754eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,2 @@ -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* +/out/ +.idea \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..4c55865 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +/.gitignore +/misc.xml +/modules.xml +/vcs.xml +/out/ diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b1001d2 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d65723f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Cryptor.iml b/Cryptor.iml new file mode 100644 index 0000000..d872f73 --- /dev/null +++ b/Cryptor.iml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Projects b/Projects new file mode 160000 index 0000000..95dc913 --- /dev/null +++ b/Projects @@ -0,0 +1 @@ +Subproject commit 95dc913ea86bf54c8318100020e6508ab8814ab3 diff --git a/src/Crypt.java b/src/Crypt.java new file mode 100644 index 0000000..8c7e0b5 --- /dev/null +++ b/src/Crypt.java @@ -0,0 +1,4 @@ +public interface Crypt { + public String crypt(String strToCrypt); + public String decrypt(String strToDecrypt); +} diff --git a/src/Cryptor.java b/src/Cryptor.java new file mode 100644 index 0000000..966978a --- /dev/null +++ b/src/Cryptor.java @@ -0,0 +1,40 @@ +import java.io.IOException; + +public class Cryptor implements Crypt { + + CryptorViaString cryptorViaString; + CryptorViaStringBuilder cryptorViaStringBuilder; + + public Cryptor(CryptorViaString cryptorViaString, CryptorViaStringBuilder cryptorViaStringBuilder) { + this.cryptorViaString = cryptorViaString; + this.cryptorViaStringBuilder = cryptorViaStringBuilder; + + } + + public String crypt(String strToCrypt) { + long m = System.currentTimeMillis(); +// String cryptedStringViaString = cryptorViaString.crypt(strToCrypt); + String cryptedStringViaStringBuilder = cryptorViaStringBuilder.crypt(strToCrypt); + double timeResult = (double) (System.currentTimeMillis() - m); + System.out.println("Время выполнения шифрования с ипсользованием StringBuilder: " + timeResult); + + return cryptedStringViaStringBuilder; + } + + public String decrypt(String strToDecrypt) { + long t = System.currentTimeMillis(); +// String cryptedStringViaString = cryptorViaString.decrypt(strToDecrypt); + String cryptedStringViaStringBuilder = cryptorViaStringBuilder.decrypt(strToDecrypt); + double timeResult = (double) (System.currentTimeMillis() - t); + System.out.println("Время выполнения шифрования с ипсользованием StringBuilder: " + timeResult); + + return cryptedStringViaStringBuilder; + + } + + +} + + + + diff --git a/src/CryptorTest.java b/src/CryptorTest.java new file mode 100644 index 0000000..f9e3ada --- /dev/null +++ b/src/CryptorTest.java @@ -0,0 +1,155 @@ +import org.junit.Assert; +import org.junit.Test; + + +public class CryptorTest { + CryptorViaString cryptorViaString = new CryptorViaString(); + CryptorViaStringBuilder cryptorViaStringBuilder = new CryptorViaStringBuilder(); + StringBuilder testStringBuilder = new StringBuilder(); + + + @Test + public void cryptBasicTest() { + String testString = "A2a3b3z3tcz3"; + String resultString = cryptorViaString.crypt("AAaaabbbzzztczzz"); + Assert.assertEquals(testString, resultString); + } + + @Test + public void decryptBasicTest() { + String testString = "AAaaabbbzzztczzz"; + String resultString = cryptorViaString.decrypt("A2a3b3z3tcz3"); + Assert.assertEquals(testString, resultString); + } + + @Test + public void cryptOneCharTest() { + String testString = "a"; + String resultString = cryptorViaString.crypt("a"); + Assert.assertEquals(testString, resultString); + } + + @Test + public void decryptOneCharTest() { + String testString = "a"; + String resultString = cryptorViaString.decrypt("a"); + Assert.assertEquals(testString, resultString); + } + + @Test + public void cryptEmptyStrTest() { + String testString = ""; + String resultString = cryptorViaString.crypt(""); + Assert.assertEquals(testString, resultString); + } + + @Test + public void decryptEmptyStrTest() { + String testString = ""; + String resultString = cryptorViaString.decrypt(""); + Assert.assertEquals(testString, resultString); + } + + @Test + public void cryptOneRepeatTest() { + String testString = "a3"; + String resultString = cryptorViaString.crypt("aaa"); + Assert.assertEquals(testString, resultString); + } + + @Test + public void decryptOneRepeatTest() { + String testString = "aaa"; + String resultString = cryptorViaString.decrypt("a3"); + Assert.assertEquals(testString, resultString); + } + + @Test + public void cryptNoRepeatTest() { + String testString = "abcdef"; + String resultString = cryptorViaString.crypt("abcdef"); + Assert.assertEquals(testString, resultString); + } + + @Test + public void decryptNoRepeatTest() { + String testString = "abcdef"; + String resultString = cryptorViaString.decrypt("abcdef"); + Assert.assertEquals(testString, resultString); + + } + + // CryptorViaStringBuilder + + @Test + public void cryptBasicV2Test() { + String testStringBuilder = "A2a3b3z3tcz3"; + String resultSringBuilder = cryptorViaStringBuilder.crypt("AAaaabbbzzztczzz"); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + @Test + public void decryptBasicV2Test() { + String testStringBuilder = "AAaaabbbzzztczzz"; + String resultSringBuilder = cryptorViaStringBuilder.decrypt("A2a3b3z3tcz3"); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + @Test + public void cryptV2OneCharTest() { + String testStringBuilder = "a"; + String resultSringBuilder = cryptorViaStringBuilder.crypt("a"); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + @Test + public void decryptV2OneCharTest() { + String testStringBuilder = "a"; + String resultSringBuilder = cryptorViaStringBuilder.decrypt("a"); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + @Test + public void cryptV2EmptyStrTest() { + String testStringBuilder = ""; + String resultSringBuilder = cryptorViaStringBuilder.crypt(""); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + @Test + public void decryptV2EmptyStrTest() { + String testStringBuilder = ""; + String resultSringBuilder = cryptorViaStringBuilder.decrypt(""); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + @Test + public void cryptV2OneRepeatTest() { + String testStringBuilder = "a3"; + String resultSringBuilder = cryptorViaStringBuilder.crypt("aaa"); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + @Test + public void decryptV2OneRepeatTest() { + String testStringBuilder = "aaa"; + String resultSringBuilder = cryptorViaStringBuilder.decrypt("a3"); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + @Test + public void cryptV2NoRepeatTest() { + String testStringBuilder = "abcdef"; + String resultSringBuilder = cryptorViaStringBuilder.crypt("abcdef"); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + @Test + public void decryptV2NoRepeatTest() { + String testStringBuilder = "abcdef"; + String resultSringBuilder = cryptorViaStringBuilder.decrypt("abcdef"); + Assert.assertEquals(testStringBuilder, resultSringBuilder); + } + + +} \ No newline at end of file diff --git a/src/CryptorViaString.java b/src/CryptorViaString.java new file mode 100644 index 0000000..3e92812 --- /dev/null +++ b/src/CryptorViaString.java @@ -0,0 +1,66 @@ + +public class CryptorViaString implements Crypt { + + @Override + public String crypt(String strToCrypt) { + + String result = ""; + + if (strToCrypt != null && !strToCrypt.equals("")) { + int count = 0; + char currentChar = 0; + + for (int i = 0; i < strToCrypt.length(); i++) { + if (currentChar == strToCrypt.charAt(i)) { + count++; + } else { + if (currentChar != 0) + result += currentChar; + + if (count > 1) { + result += count; + } + currentChar = strToCrypt.charAt(i); + count = 1; + } + } + if (count > 1) { + result += strToCrypt.charAt(strToCrypt.length() - 1); + result += count; + } else + result += strToCrypt.charAt(strToCrypt.length() - 1); + } + return result; + } + + @Override + public String decrypt(String strToDecrypt) { + + String result = ""; + char currentChar = 0; + int count; + + if (strToDecrypt != null && !strToDecrypt.equals("")) { + + for (int i = 0; i < strToDecrypt.length(); i++) { + if (Character.isDigit(strToDecrypt.charAt(i))) { + count = Character.getNumericValue(strToDecrypt.charAt(i)); + for (int j = 1; j < count; j++) { + result += currentChar; + } + } else { + currentChar = strToDecrypt.charAt(i); + if (currentChar != 0) + result += currentChar; + } + } + + if (!Character.isDigit(strToDecrypt.charAt(strToDecrypt.length() - 1)) && + !(currentChar == (strToDecrypt.charAt(strToDecrypt.length() - 1)))) + result += currentChar; + } + return result; + } +} + + diff --git a/src/CryptorViaStringBuilder.java b/src/CryptorViaStringBuilder.java new file mode 100644 index 0000000..c62c682 --- /dev/null +++ b/src/CryptorViaStringBuilder.java @@ -0,0 +1,64 @@ +public class CryptorViaStringBuilder implements Crypt { + + + StringBuilder result = new StringBuilder(); + + @Override + public String crypt(String strToCrypt) { + + if (strToCrypt != null && !strToCrypt.equals("")) { + int count = 0; + char currentChar = 0; + + for (int i = 0; i < strToCrypt.length(); i++) { + if (currentChar == strToCrypt.charAt(i)) { + count++; + } else { + if (currentChar != 0) + result.append(currentChar); + + if (count > 1) { + result.append(count); + } + currentChar = strToCrypt.charAt(i); + count = 1; + } + } + if (count > 1) { + result.append(strToCrypt.charAt(strToCrypt.length() - 1)); + result.append(count); + } else + result.append(strToCrypt.charAt(strToCrypt.length() - 1)); + } + return result.toString(); + } + + @Override + public String decrypt(String strToDecrypt) { + + + char currentChar = 0; + int count; + + if (strToDecrypt != null && !strToDecrypt.equals("")) { + + for (int i = 0; i < strToDecrypt.length(); i++) { + if (Character.isDigit(strToDecrypt.charAt(i))) { + count = Character.getNumericValue(strToDecrypt.charAt(i)); + for (int j = 1; j < count; j++) { + result.append(currentChar); + } + } else { + currentChar = strToDecrypt.charAt(i); + if (currentChar != 0) + result.append(currentChar); + } + } + + if (!Character.isDigit(strToDecrypt.charAt(strToDecrypt.length() - 1)) && + !(currentChar == (strToDecrypt.charAt(strToDecrypt.length() - 1)))) + result.append(currentChar); + } + return result.toString(); + } +} diff --git a/src/FileHandler.java b/src/FileHandler.java new file mode 100644 index 0000000..7a2aaaa --- /dev/null +++ b/src/FileHandler.java @@ -0,0 +1,37 @@ +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; + +public class FileHandler { + Cryptor cryptor; + + public FileHandler(Cryptor cryptor) { + this.cryptor = cryptor; + + } + + public void writeToFile (String strIn, String fileOut) { + try (FileWriter writer = new FileWriter(fileOut)) { + if (Files.exists(Path.of(fileOut))) { + writer.write(strIn); + writer.flush(); + } else { + Files.createFile(Path.of(fileOut)); + writer.write(strIn); + writer.flush(); + writer.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public String readFromFile (String fileIn) throws IOException { + BufferedReader reader; + String str; + reader = new BufferedReader(new FileReader(fileIn)); + str = reader.readLine(); + return str; + } + } + diff --git a/src/main.java b/src/main.java new file mode 100644 index 0000000..ab52b9c --- /dev/null +++ b/src/main.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +public class main { + + + public static void main(String[] args) throws IOException { + + String filePathToCrypt = "C:\\Users\\Usr1\\IdeaProjects\\Cryptor\\src\\tasks\\filetoCrypt.txt"; + + String filePathCryptResult = "C:\\Users\\Usr1\\IdeaProjects\\Cryptor\\src\\tasks\\filecryptResult.txt"; + String filePathDeCryptResult = "C:\\Users\\Usr1\\IdeaProjects\\Cryptor\\src\\tasks\\filedecryptResult.txt"; + + + CryptorViaString cryptorViaString = new CryptorViaString(); + CryptorViaStringBuilder cryptorViaStringBuilder = new CryptorViaStringBuilder(); + Cryptor cryptor = new Cryptor(cryptorViaString, cryptorViaStringBuilder); + FileHandler fileHandlerCrypt = new FileHandler(cryptor); + + String cryptResult = fileHandlerCrypt.readFromFile(filePathToCrypt); + cryptResult = fileHandlerCrypt.cryptor.crypt(cryptResult); + fileHandlerCrypt.writeToFile(cryptResult, filePathCryptResult); + + String decryptResult = fileHandlerCrypt.readFromFile(filePathToCrypt); + decryptResult = fileHandlerCrypt.cryptor.decrypt(decryptResult); + fileHandlerCrypt.writeToFile(decryptResult, filePathDeCryptResult); + + + } +}