在我的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
从项目存储值更新为密码hello
的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}
解释为字符串而不是变量,因此计算{passowrd}
的哈希值而不是hello
。