我有以下用于密码用户密码的Scala代码:
val digest = MessageDigest.getInstance("SHA-256")
val hash = new String(digest.digest (password.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8).getBytes
我想在使用SQL的PostgresSQL服务器中做同样的事情。
我试过了
digest(password, 'sha256')
没有用,我猜这是因为java中的getBytes
调用,我们正在消化字符串的字节而不是字符串本身(如果它甚至没有任何意义!)
Postgress SQL的等效getBytes
是什么?如果它存在?
谢谢。
CONTEXT 我只是尝试进行一个手动插入用户以便于测试的查询,它是插入但我无法登录。我的查询和scala代码生成的摘要不一样。
答案 0 :(得分:2)
val hash = new String(digest.digest (password.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8).getBytes
那是错的。您正确地对密码进行哈希处理,然后由于某种原因您将字节转换为字符串...仅将其再次转换回字节。这是不必要的,愚蠢的,最有可能腐败的事情。
val hash = digest.digest (password.getBytes(StandardCharsets.UTF_8))
你的哈希以字节为单位。
要模仿破损的代码,请尝试convert_from(digest(password, 'sha256'), 'UTF8')::bytea
,看看是否得到相同的结果。