Math 如何将两个整数编码为小写字母数字字符?

Math 如何将两个整数编码为小写字母数字字符?,math,hash,encoding,character-encoding,Math,Hash,Encoding,Character Encoding,我有两个从0到无穷大的整数(实际上可能小于100万,但不希望有任何限制)。我想把这两个整数编码成一个小写字母数字字符串(可能包含破折号,但不应该只是数字)。此外,我希望字符串具有一定的随机性(例如,不希望总是在每个int前面加上“a”)。最重要的要求是,我需要能够轻松地解码这个字母数字字符串 我通常只使用md5散列,但它不适用于这种情况,因为我无法从md5返回到原始整数。我也考虑过Base64,但它不起作用,因为字符串可能包含大写字母 是否有一种已知的哈希算法可以满足这些要求?如果您只是想更改整

我有两个从0到无穷大的整数(实际上可能小于100万,但不希望有任何限制)。我想把这两个整数编码成一个小写字母数字字符串(可能包含破折号,但不应该只是数字)。此外,我希望字符串具有一定的随机性(例如,不希望总是在每个int前面加上“a”)。最重要的要求是,我需要能够轻松地解码这个字母数字字符串

我通常只使用md5散列,但它不适用于这种情况,因为我无法从md5返回到原始整数。我也考虑过Base64,但它不起作用,因为字符串可能包含大写字母

是否有一种已知的哈希算法可以满足这些要求?

如果您只是想更改整数的基数 您可以使用base 16(也称为十六进制)代替base64:

或base32:

>>> b32_encode(1234)
b'atja===='
>>> b32_decode(b'atja====')
1234
如果你想模糊整数 最简单的方法是将整数乘以某个数字,然后用更大的随机键进行异或运算:

>>> key = 0xFa907fA06 # The result of punching my keyboard.
>>> number = 15485863
>>> obscured = (1234 * number) ^ key
50902290680
>>> hex(obscured)
'bda0350f8'
>>> (50902290680 ^ key) / number
1234

想要得到比这更强大的模糊处理,需要更多的研究,在这种情况下,类似的问题可能是一个很好的开始。

Base-32呢?如果它是可逆的,它就不是一个哈希算法,只是一个编码算法,很迂腐。当你说“有点随机”,你是什么意思?不可预测的随机或高度分布的顺序值的随机?你可能想寻找混淆你的值的想法,然后在混淆之后,你可以用简单的东西编码它,比如Base-32。Base-32看起来像我需要的。谢谢。谢谢,事实上我找到了一个图书馆,它正是我所需要的:
>>> key = 0xFa907fA06 # The result of punching my keyboard.
>>> number = 15485863
>>> obscured = (1234 * number) ^ key
50902290680
>>> hex(obscured)
'bda0350f8'
>>> (50902290680 ^ key) / number
1234