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



在我的Play框架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

插入项目命令

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

这个插入操作将PASSWORD的值存储为f0e2d8610edefa0c02b673dcac7964b02ce3e890

我面临什么问题

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

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

这个查询在我的项目中返回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

最新更新