我正在開發需要驗證的Android應用程序。但是,現有的Web應用程序(使用Symfony)以及帳戶,我必須重複使用相同的帳戶來驗證我的用戶。如何驗證用戶? (Android/Java/Symfony)
在DB,我有basicals:用戶名,鹽,encryptedPassword,將encryption_type(SHA1)...
的問題是,我不知道如何使用這些信息我的用戶進行身份驗證。
如果有人能幫我解決這個問題...
非常感謝!
我正在開發需要驗證的Android應用程序。但是,現有的Web應用程序(使用Symfony)以及帳戶,我必須重複使用相同的帳戶來驗證我的用戶。如何驗證用戶? (Android/Java/Symfony)
在DB,我有basicals:用戶名,鹽,encryptedPassword,將encryption_type(SHA1)...
的問題是,我不知道如何使用這些信息我的用戶進行身份驗證。
如果有人能幫我解決這個問題...
非常感謝!
我終於成功地做到了!我已經分析了Symfony檢查密碼的方式,這要歸功於PHP類「PluginsfGuardUser」。
public final boolean authenticate(User user)
MessageDigest md = MessageDigest.getInstance(SHA1);
byte[] saltPassword = (user.getSalt() + user.getPassword()).getBytes();
byte[] encryptedPassword = md.digest(saltPassword);
String pass = byteArrayToHexString(encryptedPassword);
if (pass.equals(user.getDbPassword()))
{
return true;
}
else
{
return false;
}
}
private String byteArrayToHexString(byte[] array) {
String result = "";
for (int i = 0; i < array.length; i++) {
result
+= Integer.toString((array[i] & 0xff) + 0x100, 16).substring(1);
}
return result;
}
根據不同的加密算法,你會做這樣的事情:
public final boolean authenticate(String attemptedPassword, byte[] encryptedPassword, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
String algorithm = "PBKDF2WithHmacSHA1";
int derivedKeyLength = 160;
int iterations = 20000;
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterations, derivedKeyLength);
SecretKeyFactory f = SecretKeyFactory.getInstance(algorithm);
byte[] encryptedPassword = f.generateSecret(spec).getEncoded();
return Arrays.equals(encryptedPassword, encryptedAttemptedPassword);
}
你需要知道哪些設置被用來生成數據庫加密的密碼。
在_Google_上搜索。 –
應該實現通常的方法登錄(用戶名,密碼)。其他方法拋出異常,當它們在會話之外運行時(即沒有事先登錄)。 – greenmarker