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

时间:2015-06-11 09:08:09

标签: mysql scala mysql-workbench anorm

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

在MySql Workbench中运行命令

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

此SQL查询在aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d字段

中插入PASSWORD此字符串

来自项目的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') 

此查询在我的项目中返回null,因为它正在将SHA1('hello')视为f0e2d8610edefa0c02b673dcac7964b02ce3e890

1 个答案:

答案 0 :(得分:2)

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}解释为String而不是变量,因此会计算{passowrd}而不是hello的哈希值。