微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

命令在MySql Workbench中运行

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

SQL查询在PASSWORD字段中插入aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d此字符串

来自Project的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以获取密码问候语

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}解释为String而不是变量,因此计算{passowrd}的散列而不是hello.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐