removed all checkstyle errors, updated sprint backlog
[staff/due1/sed-hs15-srs-purple.git] / src / main / java / ch / bfh / ti / srs / extern / Password.java
index 0c6089f..6a3272b 100644 (file)
@@ -1,3 +1,10 @@
+/*\r
+ * Copyright (c) 2015 Berner Fachhochschule, Switzerland.\r
+ *\r
+ * Project Smart Reservation System.\r
+ *\r
+ * Distributable under GPL license. See terms of license at gnu.org.\r
+ */\r
 package ch.bfh.ti.srs.extern;\r
 \r
 import javax.crypto.SecretKey;\r
@@ -7,43 +14,43 @@ import java.security.SecureRandom;
 import org.apache.commons.codec.binary.Base64;\r
 \r
 public class Password {\r
-    // The higher the number of iterations the more \r
-    // expensive computing the hash is for us and\r
-    // also for an attacker.\r
-    private static final int iterations = 20*1000;\r
-    private static final int saltLen = 32;\r
-    private static final int desiredKeyLen = 256;\r
+       // The higher the number of iterations the more\r
+       // expensive computing the hash is for us and\r
+       // also for an attacker.\r
+       private static final int iterations = 20 * 1000;\r
+       private static final int saltLen = 32;\r
+       private static final int desiredKeyLen = 256;\r
 \r
-    /** Computes a salted PBKDF2 hash of given plaintext password\r
-        suitable for storing in a database. \r
-        Empty passwords are not supported. */\r
-    public static String getSaltedHash(String password) throws Exception {\r
-        byte[] salt = SecureRandom.getInstance("SHA1PRNG").generateSeed(saltLen);\r
-        // store the salt with the password\r
-        return Base64.encodeBase64String(salt) + "$" + hash(password, salt);\r
-    }\r
+       /**\r
+        * Computes a salted PBKDF2 hash of given plaintext password suitable for\r
+        * storing in a database. Empty passwords are not supported.\r
+        */\r
+       public static String getSaltedHash(String password) throws Exception {\r
+               byte[] salt = SecureRandom.getInstance("SHA1PRNG").generateSeed(saltLen);\r
+               // store the salt with the password\r
+               return Base64.encodeBase64String(salt) + "$" + hash(password, salt);\r
+       }\r
 \r
-    /** Checks whether given plaintext password corresponds \r
-        to a stored salted hash of the password. */\r
-    public static boolean check(String password, String stored) throws Exception{\r
-        String[] saltAndPass = stored.split("\\$");\r
-        if (saltAndPass.length != 2) {\r
-            throw new IllegalStateException(\r
-                "The stored password have the form 'salt$hash'");\r
-        }\r
-        String hashOfInput = hash(password, Base64.decodeBase64(saltAndPass[0]));\r
-        return hashOfInput.equals(saltAndPass[1]);\r
-    }\r
+       /**\r
+        * Checks whether given plaintext password corresponds to a stored salted\r
+        * hash of the password.\r
+        */\r
+       public static boolean check(String password, String stored) throws Exception {\r
+               String[] saltAndPass = stored.split("\\$");\r
+               if (saltAndPass.length != 2) {\r
+                       throw new IllegalStateException("The stored password have the form 'salt$hash'");\r
+               }\r
+               String hashOfInput = hash(password, Base64.decodeBase64(saltAndPass[0]));\r
+               return hashOfInput.equals(saltAndPass[1]);\r
+       }\r
 \r
-    // using PBKDF2 from Sun, an alternative is https://github.com/wg/scrypt\r
-    // cf. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html\r
-    private static String hash(String password, byte[] salt) throws Exception {\r
-        if (password == null || password.length() == 0)\r
-            throw new IllegalArgumentException("Empty passwords are not supported.");\r
-        SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");\r
-        SecretKey key = f.generateSecret(new PBEKeySpec(\r
-            password.toCharArray(), salt, iterations, desiredKeyLen)\r
-        );\r
-        return Base64.encodeBase64String(key.getEncoded());\r
-    }\r
+       // using PBKDF2 from Sun, an alternative is https://github.com/wg/scrypt\r
+       // cf. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html\r
+       private static String hash(String password, byte[] salt) throws Exception {\r
+               if (password == null || password.length() == 0)\r
+                       throw new IllegalArgumentException("Empty passwords are not supported.");\r
+               SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");\r
+               SecretKey key = f.generateSecret(new PBEKeySpec(password.toCharArray(), salt, iterations, desiredKeyLen));\r
+               return Base64.encodeBase64String(key.getEncoded());\r
+       }\r
 }\r