【发布时间】:2021-08-03 17:01:19
【问题描述】:
我需要一个快速的 Delphi 可逆散列 ID 函数。
- 简短、模糊且高效的 ID
- 无冲突(至少不超过 32 位无符号整数)
- 可逆
- 快速
- 最好是有输入键的东西,所以它可以随机化一点... 否则,在我的所有软件模块上,“3”将始终为 23zkJ5。
- 跨平台工作
类似于 Youtube 的视频标识符。
Encode(3); // => "23zkJ5"
Decode('23zkJ5'); // => 3
PHP 似乎有不少这样的;我找不到 Delphi 的。
我看了这个,但不是我真正想要的,另外我需要 Delphi 中的一些东西。
$generator->encode(6); // => "43Vht7"
$generator->decode('43Vht7'); // => 6
我需要类似 PHP 提供的东西:
https://github.com/delight-im/PHP-IDs
我不能使用 MD5,因为它不可逆;使用密码箱加密/解密似乎有点过头了? (如果真的没有选择,Lockbox 中的哪种算法是最好的选择?)
【问题讨论】:
-
您不是在寻找哈希,而是在寻找加密。有很多 Delphi 源代码。 StackOverflow 不是要求推荐库或组件的地方。
-
好的,因为这个 php 称它为“可逆哈希”...我尝试了一些加密,但它不坚持字母数字字符...base64 在它变得太长之后,所以我只是想知道是否有人有一个快速简单的例程。
-
旧的 XOR 算法加上一些排列。这是完全可逆且易于实现的(当然也可以破解)。
-
如果您想保持相同的字符集,请查看Format Preserving Encryption。开始工作有点麻烦,但应该做你想做的。
-
"但它不坚持字母数字字符" - 哈希也是如此,那你的意思是什么?如果“可逆散列”是可能的,那么您还可以告诉我我的总和
42是否来自总和15和27或-8和50。但是,总和不能反转为它们的总和。