gpt4 book ai didi

grails - Jasypt 加密字段和 Criteria API 未获得结果(Grails)

转载 作者:行者123 更新时间:2023-12-02 15:52:15 24 4
gpt4 key购买 nike

我刚开始使用 Grails 并研究简单的注册/登录功能。
我有这个简单的域对象:

class Person {

String firstName, lastName, email
String login, password

static constraints = {
firstName nullable: true
lastName nullable: true
}
static mapping = {
password type: GormEncryptedStringType
}
}

我保存 Person 对象就好了。但是当我尝试使用 Criteria API 检索它以用于登录目的时,它不会找到它:
def criteria = Person.createCriteria()
def person = criteria.get {
and {
eq("login", params.login)
eq("password", params.password)
}
}

如果我删除 eq("password", params.password)或将其更改为未加密的内容,它可以正常工作。有人知道如何处理吗?

最佳答案

你做错了(安全)。你不加密密码,你散列它们。散列是单向且有损的,而加密是双向且无损的,但是如果您可以解密密码,那么您很容易受到获得解密 key 访问权限的攻击者的攻击,然后他们也将能够解密它们.

如果您使用散列,那么您可以(但当然不应该)让任何人查看散列密码,因为如果您使用良好的散列方案,它们将毫无用处。 Bcrypt 是最好的之一,并且易于使用。

您应该对提供的密码进行哈希处理,并根据存储的哈希密码对其进行验证,而不是解密存储的加密密码以验证用户身份验证尝试中的明文密码。对于某些算法,这很简单,只需检查值是否相同,但 Bcrypt 并非如此,因为该算法总是为每次调用生成不同的哈希值。但是该算法可以验证两个散列密码,所以这不是问题。

因此,真正解决您的问题的是停止使用加密,并停止“滚动您自己的”安全性。 spring-security-core是一个流行的选择。

关于grails - Jasypt 加密字段和 Criteria API 未获得结果(Grails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37368265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com