Java(Scala)中此哈希代码的等效SQL代码是什么

时间:2017-11-13 16:18:40

标签: java postgresql scala

我有以下用于密码用户密码的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代码生成的摘要不一样。

1 个答案:

答案 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,看看是否得到相同的结果。