gpt4 book ai didi

nhibernate - 可以从密码中派生出盐,然后对密码+派生的盐进行哈希处理吗?

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

我使用 NHibernate 并有一个自定义类型来加密数据库中的密码,以便我可以使用字符串属性来表示密码,但 NHibernate 在存储到数据库之前会转换/加密该值。目前,我在配置文件中存储盐值和加密 key ,但我真的宁愿转向密码哈希。但是,自定义 NHibernate 类型除了被告知要处理的属性值之外,对所存储的对象一无所知,因此我无法生成一些随机盐并将其与对象一起存储在该自定义类型中的另一个属性中。

由于我无法单独存储盐,所以我想知道是否可以从密码本身导出盐,然后对两者的组合进行哈希处理。例如,我可能会获取密码,对其进行 MD5 哈希,然后使用 MD5 哈希作为盐。这样可以吗?这将允许我以确定的方式保留密码,同时为每个密码使用唯一的(但派生的)盐值,但是这样做时是否有任何安全考虑?

编辑:

因为到目前为止我收到的所有答案都未能解释问题的上下文,所以让我展示 NHibernate 术语中定义的方法的签名。

public override void Set(IDbCommand cmd, object value, int index)
{
var param = (IDataParameter)cmd.Parameters[index];

if (value == null)
{
param.Value = null;
}
else
{
var temp = value.ToString();
var encrypted = encryptor.Encrypt(temp);
param.Value = encrypted;
}
}

这就是 NHibernate 给我的全部。我收到 IDbCommand 对象、一个值和一个参数索引。我对参数本身或被持久化的对象的类型一无所知。我只有一个值(value)。我无法生成随机盐并将其存储在单独的属性中,因为我不知道要持久化的对象上存在哪些属性,也不知道它们在参数集合中存储的顺序。我的目标是在此方法调用的上下文中以最安全的方式对密码进行哈希处理。如果您要反对我的建议,在此背景下收到替代想法将会有所帮助。

最佳答案

不!如果您从密码中获取盐,则所有相同的密码都具有相同的哈希值,并且盐变得毫无用处。

尝试使用

var temp = value.ToString();
var salt = generateRandonSalt();
var encrypted = encryptor.Encrypt(temp + salt);
param.Value = salt + encrypted;

“+”是指串联操​​作数或与您的值兼容的操作数。当然,您需要始终知道盐长度,以便下次检查密码。

关于nhibernate - 可以从密码中派生出盐,然后对密码+派生的盐进行哈希处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10051716/

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