最近項目要做一個離線登錄,賬號密碼與在線一樣;
實現方法是下載服務器的所以用戶名和密碼,但是服務的密碼是經過框架加密的,通過閱讀源碼,知道spring框的ShaPasswordEncoder加密是通過密碼拼接salt,然後經過加密得到的,代碼如下:
public static String mergePasswordAndSalt(String password, Object salt, boolean strict) {
if (password == null) {
password = "";
}
if (strict && salt != null && (salt.toString().lastIndexOf("{") != -1 || salt.toString().lastIndexOf("}") != -1)) {
throw new IllegalArgumentException("Cannot use { or } in salt.toString()");
} else {
return salt != null && !"".equals(salt) ? password + "{" + salt.toString() + "}" : password;
}
}
逆向得知加密方法,從而解決離線的判斷登錄用戶名和密碼是否正確。