【发布时间】:2022-01-18 22:29:16
【问题描述】:
我想从医疗 ID 创建一个唯一 ID。这听起来像是一个常见问题,但我无法在 stackoverflow 或 Google 上找到该主题。我是 python 新手,所以一个代码示例会很棒!
我有几个数据框,其中包含多达 400 万行,其中存在 5-6000 名不同的患者,我希望能够添加更多具有相同代码和唯一机会的患者(最多 500 万唯一患者) .在最终合并的数据集中,我总共获得了多达 1000 万行。
即使您知道医疗 ID 的格式,也几乎不可能对生成的唯一 ID 进行逆向工程
医疗 ID 由生日 (YYMMDD) 和四个只有数字 (0-9) 和/或字母 (A-Z) 的变量组成。
我已阅读有关该主题的以下帖子,但有些问题仍未得到解答:
Irreversible unique ID from String 这里描述了使用彩虹表修改唯一 ID 的可能性。他描述了使用盐来绕过使用彩虹表的可能性。不幸的是,盐是我最近使用的东西。
https://www.sohamkamani.com/uuid-versions-explained/ 如果我使用 UUID v1,它取决于当前计算机的 MAC 地址,这不是一个选项,因为相同的唯一 ID 应该相同,独立于它生成的计算机。 我真的无法解决使用 UUID v4 和彩虹表对唯一 ID 进行逆向工程的可能性,因为对于具有正确知识的人来说,很容易弄清楚医疗 ID 系统。
Generate ID from string in Python 使用哈希,这不是很容易逆向工程吗?
How to generate 8 digit unique identifier to replace the existing one in python pandas
所以我的要求是:
- 从医疗 ID 生成的唯一 ID
- 不可能用彩虹表反转它(非常重要,因为它是敏感信息)。
- 生成唯一 ID 时发生冲突的风险很小
- 不依赖于计算机中的 MAC 地址或其他独特的东西
- 相同的唯一 ID 将由相同的医疗 ID 生成,而与生成它的计算机无关。
- 理想情况下,长度为 10-20 位的唯一 ID,没有字母。但是如果它需要更长的字母(A-Z)和数字(0-9),那就这样吧:)
是否有任何解决方案符合上述要求? 如果上面提到的任何链接都没有我需要的东西,您能否提供一个代码示例?
示例:(DDMMYYXXXX) 2022 年出生的人的形象 ID
Medical ID Bloodsample Date
0 0101221234 5.2
1 0101224321 6.2
2 311222R09B 7.6
3 0203221234 3.8
4 311222R09B 5.7
5 0405229082 9.5
6 1012225879 7.2
7 2801226787 5.2
8 2706221HF9 6.3
9 3112228768 4.6
0 和 3,以及 2 和 4 是相同的患者。 4和7不是同一个病人。
【问题讨论】:
-
根据您描述的方案,我计算出大约 625 亿个可能的 ID - 如果您只考虑有限的出生年份范围,则会大大减少。鉴于您提出的要求,“不可逆转”不是一个合理的目标;无论选择何种算法,攻击者只需执行 625 亿次即可反转每个编码的 ID。
-
要使哈希更安全,请查看salting 和stretching。这些通常用于散列密码,但这些技术可以应用于任何需要比简单散列更高级别安全性的数据。
标签: python encryption