gpt4 book ai didi

c# - 使用 LINQ 查询加密值

转载 作者:行者123 更新时间:2023-11-30 12:48:58 27 4
gpt4 key购买 nike

我有一个具有用户名的用户类,我需要将其保存在加密的数据库中

public abstract class User
{
public virtual int Id { get; protected set; }
public virtual string Username
{
get
{
return _encryptionProvider.Decrypt(SecuredUsername);
}
protected set
{
SecuredUsername = _encryptionProvider.Encrypt(value);
}
}
[Obsolete("Use the 'Username' property -- this property is only to be used by NHibernate")]
protected virtual string SecuredUsername { get; set; }
}

我将用户实体映射如下:

public class UserMapping : ClassMap<User>
{
public UserBaseMapping()
{
Id(user => user.Id).GeneratedBy.HiLo("100");
Map(Reveal.Member<UserBase>("SecuredUsername")).Unique();
}
}

在我不得不编写一些 LINQ 语句之前,它工作正常。

User user = _session.QueryOver<User>().Where(x => x.Username == "Hamza").SingleOrDefault();

这里的问题是,当 LINQ 将上面的语句转换为 SQL 时,它变成了这样:从 [dbo] 中选择 *。[用户] 用户名如“Hamza”

正如您可能注意到的那样,表中没有名为 username 的列,而是 securedusername,它包含加密值谁能帮我解决这个问题,我需要能够使用 LINQ 进行查询。

最佳答案

您可以使用自定义类型来加密您的用户名(而不是在用户类中进行加密,而是在自定义类型中进行加密)参见 http://nhforge.org/blogs/nhibernate/archive/2009/02/22/encrypting-password-or-other-strings-in-nhibernate.aspx

当您查询时,您将只能查询完全匹配,但您将能够执行如下查询:

User user = _session.QueryOver<User>()
.Where(x => x.Username == "Hamza")
.SingleOrDefault();

如果想不区分大小写地匹配,可以在自定义类型中将值转换为大写/小写。

如果您想进行 LIKE 搜索,则需要查看其他类型的索引 - 例如。 Lucene.NET 和 NHibernate.Search

关于c# - 使用 LINQ 查询加密值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13006002/

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