パスワードを使用してデータベースをハッシュしました。次のPythonコード:"PBKDF2WithHmacSHA512"からのjavaハッシュはPythonのCRYPTとは異なります(digest_alg = 'pbkdf2(1000,20、sha512)'、salt = True)(パスワード)[0])
result = str(CRYPT(digest_alg='pbkdf2(1000,20,sha512)', salt=True)(password)[0])
(詳細はhere見つけることができます)
パスワード=は '123' は
pbkdf2(1000,20,sha512)$b3c56f341284f4be$54297564f7a3be8c6e9c10b27821f8105e0a8120
を生成し、私はJavaを使用してパスワードを検証する必要があります。私が間違っているの何助けてください
80385948513c8d1826a3a5b8abc303870d41d794
54297564f7a3be8c6e9c10b27821f8105e0a8120
:私は、次のコードを使用し
validatePassword("123", "pbkdf2(1000,20,sha512)$b3c56f341284f4be$54297564f7a3be8c6e9c10b27821f8105e0a8120");
private static boolean validatePassword(String originalPassword, String storedPassword) throws NoSuchAlgorithmException, InvalidKeySpecException
{
String[] parts = storedPassword.split("\\$");
byte[] salt = fromHex(parts[1]);
byte[] hash = fromHex(parts[2]);
PBEKeySpec spec = new PBEKeySpec(originalPassword.toCharArray(), salt, 1000, hash.length * 8);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
byte[] testHash = skf.generateSecret(spec).getEncoded();
System.out.println(toHex(testHash));
System.out.println(toHex(hash));
return true;
}
private static byte[] fromHex(String hex) throws NoSuchAlgorithmException
{
byte[] bytes = new byte[hex.length()/2];
for(int i = 0; i<bytes.length ;i++)
{
bytes[i] = (byte)Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
}
return bytes;
}
private static String toHex(byte[] array)
{
StringBuilder sb = new StringBuilder();
for(int i=0; i< array.length ;i++)
{
sb.append(Integer.toString((array[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
をが、結果は以下の通りですか?
「CRYPT」が何であるかを知らなくても誰もこの質問に答えることはできません。 –
class gluon.validators.CRYPT(key = None、digest_alg = 'pbkdf2(1000、20、sha512)'、min_length = 0、error_message = 'あまりにも短い'、salt = True、max_length = 1024) – krtl
http://web2py.readthedocs.io/ja/latest/validators.html – krtl