【发布时间】:2021-06-27 05:58:01
【问题描述】:
我有以下问题:我目前正在开发 ASP .net 核心实体框架后端,并且遇到需要在 LINQ 查询中使用自定义方法并在执行此操作时出现错误的问题。一世 研究并发现可以编写自定义函数,将其翻译为sql,但我认为这样做的范围不大。 (例如:SQL 将无法使用库和哈希字符串)。
我听说的另一种方法是将我的数据库转换为 Enumberale,然后在其上应用我的自定义方法,这种方法有效,但性能不佳,因为我将整个数据库保存在我的内存中,这变得非常有大量数据时速度很慢。所以我的问题是,是否有在 LINQ 查询中执行自定义方法的高性能解决方案?
我的详细问题是,我已经将我的加盐密码保存在我的数据库中,当有人想要登录他的帐户时,我必须将数据库中的密码与盐 + 用户密码输入进行比较,这必须在我的 where 子句中进行哈希处理。如果我不使用盐,它会起作用,因为那时我只需要对用户输入进行哈希处理,这不是数据库的列。
【问题讨论】:
-
您应该从数据库中获取盐和哈希密码,然后在代码中对用户输入进行哈希处理并与现有哈希进行比较。无需向数据库发送复杂的代码。也可能是散列故意不具有防止暴力攻击的性能。
-
在数据库中运行存储过程进行检查。您使用的是什么类型的数据库?
-
madoxdev 的回答涵盖了它:为什么要在 Linq 查询中计算类似哈希的东西?在存储像密码这样的哈希值时,您将 Salt 和哈希值保存到数据库记录中。您确实不存储未加密的值,然后尝试在查询中散列等式的两端或类似的东西。
-
请看我的回答。 @jdweng 我使用 MySQL 作为数据库。
标签: c# entity-framework linq asp.net-web-api entity-framework-core