ActFramework中存储与验证用户密码的机制与应用

    ActFramework提供简单有效的API来帮助用户处理安全性问题, 其中包括了密码保护与验证. 下面的代码演示如何在应用中使用框架提供的机制:

    Bcrypt采用随机生成盐并且将盐和hash存放在一起

    1. public final User authenticate(String email, String password) {
    2. String hash = Act.crypto().passwordHash(password);
    3. }

    答案是不行. 因为Bcrypt每次都随机生成salt和hash值,所以即便用户使用相同的密码,两次调用Act.crypto().passwordHash(password)生成的值都是不一样的. 必须用将User从数据库里面取出之后再使用Act.crypto().verifyPassword(String, String) API来比较

    答案是必须的, 在API里面调用Bcrypt的, 用的就是JFinal实现的slowEquals逻辑. 值得一提的是和JFinal的实现相比, Bcrypt做了一点优化, 如果字符串长度不匹配的话, 直接短路返回false, 而不会继续slow equals处理.