Anorm & MySQL SHA1 密码加密与 Mysql Workbench 命令不同

Anorm & MySQL SHA1 password encrytion is not same with Mysql Workbench command

在我的 Play Framework Scala 项目中,我使用 MySQL 作为数据库。在我的数据库中,我有一个名称为 PASSWORD 的列。当他们在我的项目中创建新用户时,我会将用户密码存储在此列中。我在插入用户值时对密码字段使用 SHA1 加密。如果我 运行 直接在我的数据库中从 MySQL Workbench 命令,它将在我的 PASSWORD 列中存储不同的加密字符串。

命令 运行 在 MySql Workbench

INSERT into user('PASSWORD') VALUES(SHA1('hello'));

this SQL Query insert aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d this string in PASSWORD field

来自项目的 INSERT 命令

def insert(password: String) = {
    DB.withConnection { implicit connection =>
      SQL(
        """
          insert into user(PASSWORD) 
          values (
            SHA1('{password}')
          )
        """
      ).on(       
        'password -> password       
      ).executeUpdate()
    }
  }

此插入操作将 PASSWORD 值存储为 f0e2d8610edefa0c02b673dcac7964b02ce3e890

我遇到了什么问题

将我的 PASSWORD 从项目存储值更新为 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d 密码 hello

SELECT USERNAME from USER WHERE PASSWORD = SHA1('hello') 

这个查询 returns null 在我的项目中,因为它将 SHA1('hello') 视为 f0e2d8610edefa0c02b673dcac7964b02ce3e890

f0e2d8610edefa0c02b673dcac7964b02ce3e890{password}.

的 SHA-1 散列

您需要删除 {password} 周围的引号 (') 才能使其正常工作:

def insert(password: String) = {
    DB.withConnection { implicit connection =>
      SQL(
        """
          insert into user(PASSWORD) 
          values (
            SHA1({password})
          )
        """
      ).on(       
        'password -> password       
      ).executeUpdate()
    }
  }

否则,框架将 {password} 解释为字符串而不是变量,因此计算 {passowrd} 而不是 hello 的散列。