【问题标题】:Java spring boot encrypt admin password before storing it in database?Java Spring Boot在将管理员密码存储到数据库之前对其进行加密?
【发布时间】:2019-09-28 21:10:43
【问题描述】:

我需要在数据库中初始化一个管理员用户,因为注册一个新帐户需要管理员权限。问题是当我启用加密(加密所有注册用户密码)时,它还会尝试解密初始化的管理员密码并返回错误:

Encoded password does not look like BCrypt

我想我可以在将初始化的管理员密码存储到数据库 (MySQL) 之前以某种方式对其进行加密。但我不确定如何去做。有什么建议吗?

目前,我正在使用 SQL 查询以管理员用户身份初始化数据库。

【问题讨论】:

  • 在运行时添加管理员用户有意义吗?这样,我可以使用相同的加密算法 (BCrypt) 对其进行加密。
  • 您的问题不清楚?你想用 spring 加密你的密码吗?
  • 请注意,虽然加密密码总比不加密好,但它仍然不是非常安全。您说的其他一些事情也让我对您的设置感到紧张,但我不确定如果您在运行时执行“在数据库中初始化”实际上意味着什么。 paragonie.com/blog/2016/02/how-safely-store-password-in-2016

标签: java mysql spring-boot security bcrypt


【解决方案1】:

在这种情况下,您应该直接在 DB 中用加密的密码覆盖旧的明文保存密码。或者根据新规则删除并重新创建您的帐户

为此,您可以像这样在网站上输入您的纯密码 https://www.browserling.com/tools/bcrypt 将round设置为10(这是Spring bean默认使用的值) 它会给你加密的密码。只需在数据库中替换它

【讨论】:

  • 我建议您阅读有关单向哈希以及它如何工作以更好地了解这一点
【解决方案2】:

恕我直言,我不确定 MySQL 是否有 default BCrypt encryption function。我猜你的机器上安装了 bcrypt,你用它来加密密码。如果是这种情况,我不建议使用数据库级加密。

我认为数据库级加密的另一个问题是,您传递给数据库的数据最终可能会存储在数据库日志或服务器日志中。因此,您可能会失去密码的机密性。

如果我必须设计系统,我可能会选择应用程序级加密,并让 Spring-Boot 应用程序来处理这个问题。

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多