【问题标题】:One way encrypting primary key一种加密主键的方法
【发布时间】:2016-11-18 06:43:08
【问题描述】:

我可以用来消化一封电子邮件的最佳单向排列函数是什么,以便我可以将其用作主键而不存储个人数据?

我正在准备我的第一款 F2P 游戏:一款基于瞄准机制的简单但(希望)令人上瘾的 2D 休闲益智游戏。它是用 Unity 制作的,很快就会在 Android 上发布。

为了让玩家在不同的设备上保持相同的数据,我有一个以设备电子邮件作为主键的 SQL 表,然后是另一个字符串作为游戏存档数据。

但出于隐私原因,我不想存储用户电子邮件。

所以我想用一些函数来消化它,该函数将使用原始电子邮件生成一个新字符串:

  • 是唯一的(永远不会与从不同电子邮件地址生成的另一个字符串冲突)
  • 不可破译(应该没有办法从摘要字符串中获取原始电子邮件 - 或者至少它应该足够难)

这样我仍然可以使用 Android 设备的电子邮件来检索游戏存档数据,而无需存储玩家的个人数据。

据我研究,该解决方案似乎被称为单向置换函数。问题是我似乎无法在互联网上找到合适的功能;相反,所有答案似乎都受到密码哈希解决方案的困扰,这很有趣(盐渍、MD5、SHAXXX ......)但不符合我的第一个不冲突要求。

提前感谢您对此主题的任何回答。

【问题讨论】:

  • 谢谢,我会的,但虽然答案非常有用,但它不符合我的第一个要求:永远不会发生碰撞。是的,这不太可能,但在我的情况下这是一个非常重要的要求,因为我会使用此功能来识别用户。如果有人开始游戏并找到其他玩家的存档游戏,那将不是很好——其他玩家也不会发现陌生人已经删除了他们的存档数据。我担心如果我接受你的回答,没有其他人会尝试提出更好的答案。所以,如果我再等一会儿,请理解我。谢谢!
  • 啊,我没有意识到你会让游戏延伸到宇宙的尽头,在那种情况下 SHA-256 是不够的。
  • 但我对“非常不可能”有不同的看法,这甚至不包括成为强力球赢家。这是一个思想实验,更有可能是:SHA-256 冲突、代码中的严重安全漏洞或对服务器的成功攻击?
  • 一种选择是将创建时间戳附加到 SHA-256 哈希。
  • 你好,扎夫。首先,请不要因为我暂时没有回应而生我的气。周末我一直在参加我的个人生活。其次,我想让你知道我是一个长期的游戏开发者。我在 2000 年开始了我的职业生涯。我参与了 26 款游戏,从 AAA 到智能手机、NDS、XBox 和 PSP。我还发布了我自己的独立游戏,其中两个是用我自己的 C++ 和 DirectX 制作的 2D 引擎制作的。在此之前,我用 C 和 ASM386 制作了一些图形库,但是当 DirectX 出现时,我认为这是要走的路。 继续下一条评论

标签: database email encryption digest


【解决方案1】:

您需要的是一个加密哈希函数,例如 SHA-256。此类函数旨在防碰撞,Git 使用较旧版本的 SHA-1。大多数语言/系统都支持此功能,只需 Google“Android SHA-256”以及您选择的语言即可。

一种选择是附加一个创建时间戳。

更新:由于 SHA-256 不提供足够的抗碰撞性,请考虑使用 GUID,来自RFC 4122“UUID 的长度为 128 位,并且可以保证在空间和时间上的唯一性 。”。当然你需要找到一个好的实现。

【讨论】:

  • 您好,@zaph,非常感谢您的回答。我想到了 SHA 和其他散列函数,在与同事协商并阅读了您的答案后,我做了一些研究,发现this answer 使用 SHA-256 是否足够好。看起来应该足够好,但它并不完美 - 所以我仍然会稍等一下,以防万一出现完美的解决方案。如果没有,答案是你的:-)。
  • 虽然答案并不完美,但现在我毫不怀疑它是找到的最佳近似值。非常感谢,@zaph :-)。
猜你喜欢
  • 2011-12-08
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2015-12-04
  • 2013-12-28
  • 1970-01-01
相关资源
最近更新 更多