我将假设您要进行一次传递,一个以 ID 号作为输入的 CSV,另一个以匿名数字作为输出的 CSV。我还将假设唯一 ID 的数量大约为 1000 万或更少。
我认为最好使用一些完全任意的一对一函数,从 ID 号码 (N) 到去识别号码 (D) 的集合。这样会更安全。如果你使用某种散列函数,并且对手知道了散列是什么,那么 N 中的数字可以在字典攻击中恢复,而不会有太多麻烦。相反,我建议使用一个简单的查找表:ID 1234567 映射到去识别号码 4672592 等。对应关系将存储在另一个文件中,没有该文件的对手将无能为力。
在您描述的机器上,有 1000 万或更少的记录,这不是什么大问题。伪 Python 中的草图程序:
mapping = {}
unused_numbers = list(range(10000000))
while data:
read record
for each ID number N in record:
if N in mapping:
D = mapping[N]
else:
D = choose_random(unused_numbers)
unused_numbers.del(D)
mapping[N] = D
replace N with D in record
write record
write mapping to lookup table file