hash - 出于安全目的执行您自己的算法来打乱 ID 是否有任何速度优势?
问题描述
我计划实现我自己的非常简单的“散列”公式,为具有多个用户的应用程序添加一层身份验证。我目前的计划如下:
- 用户创建一个帐户,此时在后端生成一个 ID。ID 是通过一个公式计算的(比如说 ID * 57 + 8926 - 36 * 7,或者同样随机的)。然后我将新的用户 ID 和新的“散列”数字发送回前端,并将它们存储在
localStorage
. - 用户尝试访问安全区域(假设是设置页面,以便他们可以更改自己的设置)。
- 我向后端发送两个值:它们的 ID 和散列数。我通过相同的公式运行 ID 以检查它是否与我收到的散列值匹配。如果检查通过,他们就可以进入。因此,如果有人尝试更改他们的 ID
localStorage
以访问其他用户的设置页面,那么他们实现这一目标的唯一方法就是猜测公式是什么。他们可以很容易地猜出用户 ID,但猜测相应的数字是 ID * 57 + 8926 - 36 * 7 的结果似乎不太可能。
我这样做是因为它比数据库查找实际散列值更快/更便宜......我想?使用包来创建某种主键/uuid而不是自己“散列”一个值并每次都进行数据库查找会更有意义吗?
我看到很多帖子说“不要自己动手”——这是绝对的吗?如果您正在处理相对不敏感的数据,是否值得放慢您的应用程序?
技术栈:FE 上的 React、BE 上的 Python、SQL db。
解决方案
推荐阅读
- r - R用相同的值填充向量,直到找到不同的值
- r - 基于一个或多个单词的正则表达式,后跟两个数值,将字符串拆分为行
- algorithm - 基于时间的资产分配
- css - 带有 css flexbox 的多行列
- java - PrinterJob.lookupPrintServices() 在 Ubuntu 16 系统上返回空数组
- excel - 复选框作为条件
- active-directory - 通过 LDS 实例在 AD 中搜索用户
- apache-kafka - Kafka Streams - flatMapValues 的 Integral 与 Separable 处理程序
- alfresco - bpm 方案中定时器事件后如果有服务任务或脚本任务出错(Alfresco 的 Activiti 6)
- c++ - 无法将数组中的负值转换为正值?