SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA512”) jette NoSuchAlgorithmException

Après un peu de recherche et un peu de travail que j'ai finalement été en mesure de hachage sel le mot de passe maintenant, il est une question qui est sur mon esprit j'ai utilisé le SHA1 méthode et je voudrais essayer d'utiliser le SHA512, car on m'a dit que c'est mieux (plus sécurisé) donc voici mon code son un peu partout, mais je pense que c'est compréhensible donc:

public class Safety
{
//calling some parameters for possible later changes
public static final String algorithm = "PBKDF2WithHmacSHA1";
public static final int saltbytesize = 24;
public static final int hashbytesize = 24;
public static final int iterations = 1000;
public static final int iIndex = 0;
public static final int sIndex = 1;
public static final int pbkIndex = 2;
public static Users passwordHash(Users user) throws NoSuchAlgorithmException,
InvalidKeySpecException
{
SecureRandom sR = new SecureRandom();
byte[] pws = new byte[saltbytesize];
sR.nextBytes(pws);
byte[] pwh = pbkdf2(user.getPassword().toCharArray(), pws, iterations, hashbytesize);
user.setPassword(toHex(pwh));
byte[] sas = new byte[saltbytesize];
sR.nextBytes(sas);
byte[] sah = pbkdf2(user.getsA().toCharArray(), sas, iterations, hashbytesize);
user.setsA(toHex(sah));
user.setUserhash(pws);
user.setSahash(sas);
return user;
}
public static boolean hashpassword(String username, String password, Users user)
throws NoSuchAlgorithmException,
InvalidKeySpecException
{
byte[] pws = user.getUserhash();
byte[] pwh = pbkdf2(password.toCharArray(), pws, iterations, hashbytesize);
String searcher = toHex(pwh) + username;
String searched = user.getPassword() + user.getUsername();
if (searcher.equals(searched))
{
return true;
}
return false;
}
private static byte[] pbkdf2(char[] password, byte[] salt,
int iterations, int bytes)
throws NoSuchAlgorithmException, InvalidKeySpecException
{
PBEKeySpec spec = new PBEKeySpec(password, salt, iterations, bytes * 8);
SecretKeyFactory skf = SecretKeyFactory.getInstance(algorithm);
return skf.generateSecret(spec).getEncoded();
}
private static String toHex(byte[] array)
{
BigInteger bi = new BigInteger(1, array);
String hex = bi.toString(16);
int paddingLength = (array.length * 2) - hex.length();
if (paddingLength > 0)
return String.format("%0" + paddingLength + "d", 0) + hex;
else
return hex;
}
}

Donc voilà mon code, cependant, je n'ai pas été capable de faire SHA512 et j'ai déjà essayé public static final String algorithm = "PBKDF2WithHmacSHA512" mais ça ne semble pas être la bonne chaîne pour l'algorithme, car il jette les pas d'un tel algorithme exception.

Je souhaite également la bienvenue changements qui pourraient rendre le code mieux.

comme indiqué ci-dessus!
pertinentes de quelques ligne(s) de code

public static final String algorithme = "PBKDF2WithHmacSHA512"<<<<<

toujours formater votre code pour faire joli, si vous demandez à des gens de le regarder. La clarté de code est la moitié de la question.
Je vous remercie et je sais que mais la façon dont je bidouille genre hors des limites de ma capacité à le faire paraître jolie.
pas vraiment. le code que vous avez collé n'est pas aligné l'espacement et les états financiers résumés, etc. à tout le moins corrigé que pour être agréable à la question-answerers =)
Travaille 🙂
Il fixe. Le principal problème avec votre code de mise en forme semble avoir été onglets - il devrait y jamais être onglets dans le code, et l'édition d'affichage et la sortie peuvent utiliser différents taquets de tabulation, de sorte que le retrait peut avoir un aspect différent. Aussi, si vous utilisez un décent IDE (dire NetBeans), c'est plutôt difficile d'écrire du code sans avoir décent mise en forme.

OriginalL'auteur Fahadalkadhi95 | 2013-12-27