一种加密主密钥的方法

One way encrypting primary key

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

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

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

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

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

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

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

预先感谢您对此主题的任何回答。

您需要的是加密哈希函数,例如 SHA-256。这些函数被设计成抗碰撞的,Git 使用旧版本的 SHA-1。大多数 languages/systems 都支持此功能,只需 Google "Android SHA-256" 以及您选择的语言。

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

更新:由于 SHA-256 不提供足够的抗碰撞性,请考虑 s GUID,来自 RFC 4122"A UUID is 128 bits long, and can guarantee uniqueness across space and time."。当然你需要找到一个好的实现。