From 860109229359067fcd86a8cac21e5021d79ed89d Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Sun, 21 Sep 2014 14:04:33 +0200 Subject: [PATCH] Junit data creation test based on second persistence unit --- Sda2/P/forum_1/pom.xml | 9 ++- .../mi/sda2/forum/tools/HashProvider.java | 59 ++++++++++--------- .../main/resources/META-INF/persistence.xml | 27 ++++----- 3 files changed, 53 insertions(+), 42 deletions(-) diff --git a/Sda2/P/forum_1/pom.xml b/Sda2/P/forum_1/pom.xml index 83e4b4717..28eec3923 100644 --- a/Sda2/P/forum_1/pom.xml +++ b/Sda2/P/forum_1/pom.xml @@ -107,10 +107,17 @@ <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <!-- <version>4.3.2.Final</version> --> - <version>4.2.0.Final</version> </dependency> + <!-- Testing --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + </dependency> + <!-- Encryption / Hash / Base64 --> <dependency> <groupId>commons-codec</groupId> diff --git a/Sda2/P/forum_1/src/main/java/de/hdm_stuttgart/mi/sda2/forum/tools/HashProvider.java b/Sda2/P/forum_1/src/main/java/de/hdm_stuttgart/mi/sda2/forum/tools/HashProvider.java index 2ae4a7755..4a0782b15 100644 --- a/Sda2/P/forum_1/src/main/java/de/hdm_stuttgart/mi/sda2/forum/tools/HashProvider.java +++ b/Sda2/P/forum_1/src/main/java/de/hdm_stuttgart/mi/sda2/forum/tools/HashProvider.java @@ -26,6 +26,21 @@ public class HashProvider { private static final int iterations = 10*1024; private static final int saltLen = 32; private static final int desiredKeyLen = 256; + + private static SecretKeyFactory secretKeyFactory; + private static SecureRandom secureRandom; + private static byte[] salt; + + + static { + try { + secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); + secureRandom = SecureRandom.getInstance("SHA1PRNG"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + salt = secureRandom.generateSeed(saltLen); + } /** . */ /** @@ -36,16 +51,8 @@ public class HashProvider { * @return the generated hash separated from salt by "$" */ public static String getSaltedHash(char [] password) { - byte[] salt; - try { - salt = SecureRandom.getInstance("SHA1PRNG").generateSeed(saltLen); - // store the salt with the password - return Base64.encodeBase64String(salt) + "$" + hash(password, salt); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - System.exit(1); - return null; + secureRandom.nextBytes(salt); + return Base64.encodeBase64String(salt) + "$" + hash(password, salt); } /** @@ -57,28 +64,26 @@ public class HashProvider { */ public static boolean check(char[] password, String stored){ String[] saltAndPass = stored.split("\\$"); - if (saltAndPass.length != 2) + if (saltAndPass.length != 2) { return false; - String hashOfInput = hash(password, Base64.decodeBase64(saltAndPass[0])); - return hashOfInput.equals(saltAndPass[1]); + } else { + String hashOfInput = hash(password, Base64.decodeBase64(saltAndPass[0])); + return hashOfInput.equals(saltAndPass[1]); + } } // using PBKDF2 from Sun, an alternative is https://github.com/wg/scrypt // cf. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html private static String hash(char [] password, byte[] salt) { - SecretKeyFactory f; - try { - f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); - SecretKey key = f.generateSecret(new PBEKeySpec( - password, salt, iterations, desiredKeyLen) - ); - return Base64.encodeBase64String(key.getEncoded()); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (InvalidKeySpecException e) { - e.printStackTrace(); - } - System.exit(1); - return null; + SecretKey key; + try { + key = secretKeyFactory.generateSecret(new PBEKeySpec( + password, salt, iterations, desiredKeyLen) + ); + return Base64.encodeBase64String(key.getEncoded()); + } catch (InvalidKeySpecException e) { + e.printStackTrace(); + return null; + } } } \ No newline at end of file diff --git a/Sda2/P/forum_1/src/main/resources/META-INF/persistence.xml b/Sda2/P/forum_1/src/main/resources/META-INF/persistence.xml index 72644f8d9..930396714 100644 --- a/Sda2/P/forum_1/src/main/resources/META-INF/persistence.xml +++ b/Sda2/P/forum_1/src/main/resources/META-INF/persistence.xml @@ -5,37 +5,36 @@ version="2.0"> -<!-- - <persistence-unit name="de.hdm_stuttgart.mi.sda2.forum.web"> + <persistence-unit name="de.hdm_stuttgart.mi.sda2.forum" > <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="eclipselink.jdbc.platform" - value="org.eclipse.persistence.platform.database.H2Platform" /> - <property name="eclipselink.jdbc.driver" value="org.h2.Driver" /> - <property name="eclipselink.jdbc.url" value="jdbc:h2:˜/jpacontaienerexampledb" /> - <property name="eclipselink.jdbc.user" value="sa" /> - <property name="eclipselink.jdbc.password" value="sa" /> + value="org.eclipse.persistence.platform.database.MySQLPlatform" /> + <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm" /> + <property name="javax.persistence.jdbc.user" value="hdmuser" /> + <property name="javax.persistence.jdbc.password" value="XYZ" /> <property name="eclipselink.logging.level" value="FINE" /> + <property name="eclipselink.connection-pool.default.initial" value="5" /> <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> <property name="eclipselink.ddl-generation.output-mode" value="database" /> </properties> </persistence-unit> - - --> - <persistence-unit name="de.hdm_stuttgart.mi.sda2.forum"> + <persistence-unit name="de.hdm_stuttgart.mi.sda2.forum.test" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="eclipselink.jdbc.platform" value="org.eclipse.persistence.platform.database.MySQLPlatform" /> - <property name="eclipselink.jdbc.driver" value="com.mysql.jdbc.Driver" /> - <property name="eclipselink.jdbc.url" value="jdbc:mysql://localhost:3306/hdm" /> - <property name="eclipselink.jdbc.user" value="hdmuser" /> - <property name="eclipselink.jdbc.password" value="XYZ" /> + <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm" /> + <property name="javax.persistence.jdbc.user" value="hdmuser" /> + <property name="javax.persistence.jdbc.password" value="XYZ" /> <property name="eclipselink.logging.level" value="FINE" /> + <property name="eclipselink.connection-pool.default.initial" value="5" /> <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> <property name="eclipselink.ddl-generation.output-mode" value="database" /> -- GitLab