在我的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
答案 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
的哈希值。