Apache Shiro 盐散列密码
Apache Shiro salt hashed password
我需要使用 Apache Shiro 对哈希 (SHA-256) 密码进行加盐处理。我使用了以下方法,但它使用纯文本密码作为参数。但是我需要从前端获取一个经过哈希处理的密码并将其加盐并存储在服务器端。否则,如果我使用以下方法,我将不得不通过前端一直传递明文密码,这是不安全的。所以请给我一个解决这个问题的方法。
String hashedPassword = new Sha256Hash(plainTextPassword, salt);
密码经过哈希处理后,您无法对其进行加盐。 Salting 的工作原理是将 salt 与纯文本密码结合起来,然后对整个密码进行哈希处理。这就是为什么 Shiro 的 Sha256Hash 需要你给它明文密码。
只要此通信是安全的(例如,用于 Web UI 的 HTTPS),通常会将明文密码从前端传递到服务层。你唯一不应该做的就是将纯文本密码存储在数据库中(正确配置的 Shiro 不会这样做)因为你的数据库可能会受到威胁。
当从前端向您的服务传递纯文本密码时,它只会在内存中存在很短的时间,然后才会被垃圾回收。要获得密码,某人必须要么中断您的 SSL 连接(在这种情况下您无论如何都会被搞砸),要么破坏您的服务器并转储内存(在这种情况下您无论如何都会被搞砸)。
我需要使用 Apache Shiro 对哈希 (SHA-256) 密码进行加盐处理。我使用了以下方法,但它使用纯文本密码作为参数。但是我需要从前端获取一个经过哈希处理的密码并将其加盐并存储在服务器端。否则,如果我使用以下方法,我将不得不通过前端一直传递明文密码,这是不安全的。所以请给我一个解决这个问题的方法。
String hashedPassword = new Sha256Hash(plainTextPassword, salt);
密码经过哈希处理后,您无法对其进行加盐。 Salting 的工作原理是将 salt 与纯文本密码结合起来,然后对整个密码进行哈希处理。这就是为什么 Shiro 的 Sha256Hash 需要你给它明文密码。
只要此通信是安全的(例如,用于 Web UI 的 HTTPS),通常会将明文密码从前端传递到服务层。你唯一不应该做的就是将纯文本密码存储在数据库中(正确配置的 Shiro 不会这样做)因为你的数据库可能会受到威胁。
当从前端向您的服务传递纯文本密码时,它只会在内存中存在很短的时间,然后才会被垃圾回收。要获得密码,某人必须要么中断您的 SSL 连接(在这种情况下您无论如何都会被搞砸),要么破坏您的服务器并转储内存(在这种情况下您无论如何都会被搞砸)。