首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以一致的方式加密主密钥

问如何以一致的方式加密主密钥
EN

Stack Overflow用户
提问于 2011-03-11 22:43:50
回答 7查看 3.2K关注 0票数 0

我有一个数据库表,其中有一个简单的递增整数作为主键(1、2、3等)。这些数字代表了一所大学的校友,记录中有个人信息。我被要求在向用户显示时(在他们查询数据库之后)给每个记录一个唯一的ID,但是ID不能是主键,它必须是一致的。

例如,如果有人检索了带有任意ID 88gh344r的记录,然后再进行另一次搜索并再次检索记录88gh344r,他们需要能够说“这是同一个人”。因为人们需要能够识别从一个搜索到下一个搜索的标识符,所以ID不可能是长的和复杂的。

我想了三种方法:

  1. 创建一个包含主键和随机数字序列的额外表,并获取查询以检索与主键等效的随机数。
  2. 使用MySQL的SHA2或AES加密主密钥,但这些密钥会产生长的字母和数字序列。
  3. 在查询中动态加密主密钥,使用类似于Base64加密的方法。

其中哪一个是最好的,还是我错过了一个更好的方法?

EN

回答 7

Stack Overflow用户

发布于 2011-03-11 22:49:29

实际上,我只是在URL速记器上写了一个简短的图图,它是在此基础上工作的,使用了一个透明的种子。您可以使用该函数创建查找键,并将其作为代码为这里的“引用”键存储在DB中。

票数 1
EN

Stack Overflow用户

发布于 2011-03-11 22:49:39

如果你这么做是为了保护隐私,那你就是在做一个重大的伪装。用不了多久,最蹩脚的脚本孩子就会编写一个简单的程序,它只会尝试每一个可能的“哈希”,然后加载你的整个列表。

您应该检查正确的访问控制,以便人们只能看到他们可以看到的东西。

票数 1
EN

Stack Overflow用户

发布于 2011-03-11 23:05:47

如果我正确地理解了您,您的主要目标就是不显示主键,而是在与用户交流时使用其他的东西。

最简单的方法:

将CHAR列添加到表中,并选择希望其他标识符为的长度,例如CHAR(16)。

为该列提供唯一的索引,这样就不会有任何重复的索引。

对于每一行,生成一个长度为16的安全*随机*字符串,并更新该行。

不要散列普通主键。如果钥匙从1,2,3开始。然后每个人只要计算1,2,3的散列,就可以将id与hash相匹配.等

另一个问题是,例如,如果表中已经有200行,并且添加了1,那么攻击者可以自动将主键201与列表中刚刚出现的随机字符串关联起来。

另一方面,为什么首先需要隐藏主键。也许您应该加密列中的个人用户数据?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5279155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档