加密短标识符?

信息安全 加密 哈希 随机数
2021-08-20 12:18:59

我正在开发一个不显示记录数的 webapp,因为它隐藏了主键。我正在寻找一种更好的方法来做到这一点。

我最喜欢的想法是使用分组密码加密 ID 本身,因为这不需要额外的跟踪表,并且如果块大小等于密钥大小,它应该可以正常工作。

但是,我不想要 128 位块大小,因为键入需要一段时间example.com/records/MTZjaHJzRm9yMTI4Yml0cw(Base 64 表示)

理想的块大小将是完全可调的。我希望能够进行 8 位 ID 输入,从而产生 8 位输出,即通过使用永久存储的随机密钥无冲突。输入将是真正的主键,输出将是向公众显示的标识符。我可能决定更改数字长度,或切换到 Base64 标识符,我希望算法足够灵活以适应这一点?

您能否为如此短的数据和输出推荐一个加密例程?我不在乎密钥是否短,只有数据和输出必须是。

1个回答

您想要的是保留格式的加密不幸的是,没有现成的标准,但一些合理的结构是已知的。我会推荐Thorp shuffle,这是一个非常不平衡的 Feistel 方案;给定足够的轮次,这可以实现接近最优的排列(除了Feistel方案必须是偶排列)。

请注意,实现自己的加密算法充满危险。如果您对上面引用的文章不满意,请找其他合适的人。(幸运的是,在您的特定场景中,如果您使用弱密码,惩罚是有限的:攻击者可能会猜测记录数或预测下一个主键值。)