gpt4 book ai didi

sql - 在 attr_encrypted 列上的 rails 中查询

转载 作者:数据小太阳 更新时间:2023-10-29 07:18:25 31 4
gpt4 key购买 nike

我有一个 ruby​​ on rails 应用程序,我正在使用 attr_encrypted gem 来加密一些用户信息。它有盐和 IV,所以它是双向加密的。 gem 拦截动态 find_by 以协助查询,但对于我的情况来说这不是一个足够的查询,因为我关心结果的数量。

有没有办法查询表以返回与给定 secret 匹配的所有结果?

这是例子。我有一个 users 表,它有一个加密的 secret 属性。因此,该表具有 encrypted_secretencrypted_secret_ivencrypted_secret_salt。如果一个用户给出了“abd123”的 secret ,我如何查询表以查看有多少其他人也使用“abc123”作为他们的 secret ?

最佳答案

您还可以保存未加密 secret 的额外 secret_hash。如果两条记录具有相同的 secret,那么它们也将具有相同的 secret_hash

在您的模型中添加如下内容:

scope :by_secret, ->(secret) { 
where(secret_hash: Digest::MD5.hexdigest(secret)
}

before_save :generate_secret_hash

private
def generate_secret_hash
self.secret_hash = Digest::MD5.hexdigest(secret)
end

之后,你可以这样查询:

YourModel.by_secret('abd123').count

警告

存储密码和其他敏感信息的 MD5 散列值存在安全风险。即使您无法从 secret_hash 中分辨出纯文本 secret,它也可以让您分辨出用户何时共享相同的 secret。或者 - 更糟糕的是 - MD5 哈希可能在 MD5 反向查找字典中可用。

您必须谨慎权衡此安全问题与能够对该列进行查询的好处。

关于sql - 在 attr_encrypted 列上的 rails 中查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26855982/

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