diff --git a/src/main/java/com/ugsbo/Crypto/Crypto_Logic.java b/src/main/java/com/ugsbo/Crypto/Crypto_Logic.java new file mode 100644 index 0000000..62f1dda --- /dev/null +++ b/src/main/java/com/ugsbo/Crypto/Crypto_Logic.java @@ -0,0 +1,22 @@ +package com.ugsbo.Crypto; + +import java.io.UnsupportedEncodingException; +import java.security.GeneralSecurityException; + +public class Crypto_Logic { + + public static void main(String[] args) throws UnsupportedEncodingException, GeneralSecurityException { + // TODO Auto-generated method stub + String test = "Hallo, mein Name ist Christian"; + + Payload temp = new Payload(); + temp.setOffen(test); + temp.setPassword("geheim"); + temp.verschlüsseln(); + System.out.println(temp.getVerschlüsselt()); + + temp.entschlüsseln(); + System.out.println(temp.getOffen()); + } + +} diff --git a/src/main/java/com/ugsbo/Crypto/Payload.java b/src/main/java/com/ugsbo/Crypto/Payload.java new file mode 100644 index 0000000..a2bd031 --- /dev/null +++ b/src/main/java/com/ugsbo/Crypto/Payload.java @@ -0,0 +1,92 @@ +package com.ugsbo.Crypto; + +import java.io.UnsupportedEncodingException; +import java.security.GeneralSecurityException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.Base64; +import javax.crypto.*; +import javax.crypto.spec.SecretKeySpec; + + +public class Payload { + + String offen; + String verschlüsselt; + SecretKeySpec password; + + public Payload() { + offen = ""; + verschlüsselt = ""; + + try { + this.setPassword(""); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (GeneralSecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + + public String getOffen() { + return offen; + } + + + + public String getVerschlüsselt() { + return verschlüsselt; + } + + public void setOffen(String offen) { + this.offen = offen; + } + + + + public void setVerschlüsselt(String verschlüsselt) { + this.verschlüsselt = verschlüsselt; + } + + + + public void setPassword(String password) + throws GeneralSecurityException, UnsupportedEncodingException { + byte[] key = (password).getBytes("UTF-8"); + + // aus dem Array einen Hash-Wert erzeugen mit MD5 oder SHA + MessageDigest sha = MessageDigest.getInstance("SHA-256"); + key = sha.digest(key); + + // nur die ersten 128 bit nutzen + key = Arrays.copyOf(key, 16); + + // der fertige Schluessel + this.password = new SecretKeySpec(key, "AES"); + } + + + + public void verschlüsseln() throws NoSuchAlgorithmException, GeneralSecurityException { + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.ENCRYPT_MODE, password); + byte[] encrypted = cipher.doFinal(offen.getBytes()); + + verschlüsselt = Base64.getEncoder().encodeToString(encrypted); + } + + public void entschlüsseln() throws NoSuchAlgorithmException, GeneralSecurityException { + byte[] text = Base64.getDecoder().decode(verschlüsselt); + + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.DECRYPT_MODE, password); + byte[] cipherData2 = cipher.doFinal(text); + offen = new String(cipherData2); + + } + +} diff --git a/src/test/java/com/ugsbo/Crypto/Crypt.java b/src/test/java/com/ugsbo/Crypto/Crypt.java new file mode 100644 index 0000000..e597fc4 --- /dev/null +++ b/src/test/java/com/ugsbo/Crypto/Crypt.java @@ -0,0 +1,66 @@ +/** + * + */ +package com.ugsbo.Crypto; + +import com.ugsbo.Crypto.*; +import static org.junit.Assert.*; +import java.io.UnsupportedEncodingException; +import java.security.GeneralSecurityException; +import java.security.NoSuchAlgorithmException; +import org.junit.Before; +import org.junit.Test; + +public class Crypt { + + + private Payload workingobjekt; + + @Before + public void setUp() throws Exception { + workingobjekt = new Payload(); + } + + @Test + public void offenIstAnders() { + + String eingabe = "TestText"; + String ergebnis; + String password = ""; + + try { + workingobjekt.setOffen(eingabe); + workingobjekt.setPassword(password); + workingobjekt.entschlüsseln(); + } catch (GeneralSecurityException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + ergebnis = workingobjekt.getVerschlüsselt(); + + assertNotEquals("unterschidliche Texte", eingabe, ergebnis); + } + + @Test + public void verUndEntschlüsseln() { + + String password = "Test"; + String eingabe = "TestText"; + String ergebnis; + + try { + workingobjekt.setOffen(eingabe); + workingobjekt.setPassword(password); + workingobjekt.verschlüsseln(); + workingobjekt.entschlüsseln(); + } catch (GeneralSecurityException | UnsupportedEncodingException e) { + e.printStackTrace(); + } + ergebnis = workingobjekt.getOffen(); + + assertEquals("das entschlüsselte Test Wort", ergebnis, eingabe); + } + +} diff --git a/src/test/java/com/ugsbo/Crypto/DeCrypt.java b/src/test/java/com/ugsbo/Crypto/DeCrypt.java new file mode 100644 index 0000000..bcc99f4 --- /dev/null +++ b/src/test/java/com/ugsbo/Crypto/DeCrypt.java @@ -0,0 +1,62 @@ +package com.ugsbo.Crypto; + +import static org.junit.Assert.*; +import java.io.UnsupportedEncodingException; +import java.security.GeneralSecurityException; +import com.ugsbo.Crypto.*; +import org.junit.Before; +import org.junit.Test; + +public class DeCrypt { + + private Payload workingobjekt; + + @Before + public void setUp() throws Exception { + workingobjekt = new Payload(); + } + + @Test + public void verschlüsseltIstAnders() { + + String eingabe = "TestText"; + String password = "Test"; + String ergebnis; + + try { + workingobjekt.setVerschlüsselt(eingabe); + workingobjekt.setPassword(password); + workingobjekt.entschlüsseln(); + } catch (GeneralSecurityException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + ergebnis = workingobjekt.getOffen(); + + assertNotEquals("unterschidliche Texte", eingabe, ergebnis); + } + + @Test + public void entUndVerschlüsseln() { + + String password = "Test"; + String eingabe = "TestText"; + String ergebnis; + + try { + workingobjekt.setOffen(eingabe); + workingobjekt.setPassword(password); + workingobjekt.verschlüsseln(); + workingobjekt.entschlüsseln(); + } catch (GeneralSecurityException | UnsupportedEncodingException e) { + e.printStackTrace(); + } + + ergebnis = workingobjekt.getOffen(); + + assertEquals("das entschlüsselte Test Wort", ergebnis, eingabe); + } + +}