diff --git a/pom.xml b/pom.xml
index de00545..0314c72 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
tcrypt
- ch.n1b.tcrypt.App
+ ch.n1b.tcrypt.AppDirectContent
1.8
1.8
UTF-8
@@ -36,6 +36,12 @@
+
+ commons-codec
+ commons-codec
+ 1.9
+
+
org.hamcrest
hamcrest-junit
@@ -86,6 +92,23 @@
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.1
+
+
+
+
+ package
+
+ shade
+
+
+
+
+
diff --git a/src/main/java/ch/n1b/tcrypt/AppDirectContent.java b/src/main/java/ch/n1b/tcrypt/AppDirectContent.java
new file mode 100644
index 0000000..9710266
--- /dev/null
+++ b/src/main/java/ch/n1b/tcrypt/AppDirectContent.java
@@ -0,0 +1,59 @@
+package ch.n1b.tcrypt;
+
+import ch.n1b.tcrypt.cryptor.AesGcmCryptor;
+import org.apache.commons.codec.binary.Base64;
+
+public final class AppDirectContent {
+
+ private static final String UNICODE_FORMAT = "UTF8";
+
+ private static final AesGcmCryptor CRYPTOR = new AesGcmCryptor();
+
+ public static void main(String[] args) {
+
+ if (args.length != 3) {
+ printUsage();
+ return;
+ }
+
+ final String mode = args[0];
+ final String password = args[1];
+ final String data = args[2];
+
+ if ("encode".equals(mode)) {
+ System.out.println(encrypt(password, data));
+ return;
+ }
+
+ if ("decode".equals(mode)) {
+ System.out.println(decrypt(password, data));
+ return;
+ }
+
+ printUsage();
+ }
+
+ private static String encrypt(final String password, final String unencryptedString) {
+ try {
+ byte[] plainText = unencryptedString.getBytes(UNICODE_FORMAT);
+ byte[] encryptedText = CRYPTOR.encrypt(password.toCharArray(), plainText);
+ return new String(Base64.encodeBase64(encryptedText));
+ } catch (final Exception e) {
+ throw new RuntimeException("Unable to encrypt!", e);
+ }
+ }
+
+ private static String decrypt(final String password, final String data) {
+ try {
+ byte[] encryptedText = CRYPTOR.decrypt(password.toCharArray(),Base64.decodeBase64(data));
+ return new String(encryptedText);
+ } catch (final Exception e) {
+ throw new RuntimeException("Unable to decrypt!", e);
+ }
+ }
+
+
+ private static void printUsage() {
+ System.out.printf("Usage: tcrypt ( encode | decode ) [master key / password] [data to encode/decode]%n");
+ }
+}
diff --git a/src/main/java/ch/n1b/tcrypt/cryptor/AesGcmCryptor.java b/src/main/java/ch/n1b/tcrypt/cryptor/AesGcmCryptor.java
index e6c98c4..6bf7148 100644
--- a/src/main/java/ch/n1b/tcrypt/cryptor/AesGcmCryptor.java
+++ b/src/main/java/ch/n1b/tcrypt/cryptor/AesGcmCryptor.java
@@ -141,7 +141,7 @@ public byte[] encrypt(char[] password, byte[] plaintext)
// initialise random and generate IV (initialisation vector)
SecretKey key = deriveAesKey(password, PBKDF2_SALT, AES_KEY_BITS_LENGTH);
final byte[] iv = new byte[GCM_IV_BYTES_LENGTH];
- SecureRandom random = SecureRandom.getInstanceStrong();
+ SecureRandom random = new SecureRandom();
random.nextBytes(iv);
// encrypt