【发布时间】: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