生成唯一的固定长度字符串

时间:2015-01-29 11:43:36

标签: algorithm cryptography

我需要生成指定长度的唯一非顺序ID。我查了一些Feistel密码的实现,但我不明白为什么选择了具体的数字,它们如何影响输出。基本上,我需要一个函数int pseudo_encrypt(int seed, int max),它为每个低于最大值的种子产生小于最大值的唯一结果。

UPD:事实证明它被称为“格式保留加密”。我尝试过AES CTR模式,但问题是'length'是以字节为单位指定的。因此,如果max大于255,则密码将产生0到65535之间的结果。如何处理此问题?

1 个答案:

答案 0 :(得分:0)

使用密码是正确的。由于密码是可逆的,因此每个种子编号将加密为唯一的加密值,并且可以解密回原始值。

要生成所需的唯一编号序列,可以根据需要为种子0,1,2,3 ......加密任意数量的唯一编号。

您的主要问题可能是您需要的最大值。对于max =(2 ^ 64) - 1,然后在ECB模式下使用具有固定密钥的DES。对于max =(2 ^ 128) - 1,在ECB模式下使用带有固定密钥的AES。不同的密钥提供从明文到密文的不同映射,因此您需要继续使用相同的密钥以避免重复。

如果您的最大尺寸不同,那么您将需要做更多的工作。基本上你需要一个块密码,其块大小与你的max值相同,以位为单位。您可以使用适当的块大小构建自己的Feistel密码,否则您可以使用Hasty Pudding cipher,它允许您想要的任何合理的块大小。