【发布时间】:2015-08-26 21:15:06
【问题描述】:
在我的 Play Framework Scala 项目中,我使用 MySQL 作为数据库。在我的数据库中,我有一个名为 PASSWORD 的列。当他们在我的项目中创建新用户时,我会将用户密码存储在此列中。我在插入用户值时对密码字段使用SHA1 加密。如果我从 MySQL Workbench 直接在我的数据库中运行该命令,它会将不同的加密字符串存储在我的 PASSWORD 列中。
在 MySql Workbench 中运行命令
INSERT into user('PASSWORD') VALUES(SHA1('hello'));
这个 SQL 查询在 PASSWORD 字段中插入 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d 这个字符串
项目中的 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
【问题讨论】:
-
使用 Anorm 2.3+,
SQL"INSERT INTO user (PASSWORD) VALUES ($password)"不那么冗长。 -
@Peanut 的回答是正确的,因为您错误地使用了准备好的语句。但是 SHA-1 散列不再被认为是安全的。考虑在应用程序级别而不是数据库级别使用像 jbcrypt 这样的库来对密码进行加盐+哈希处理。
-
@m-z 我以后会用到它。谢谢你的信息。
标签: mysql scala mysql-workbench anorm