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

时间:2016-08-25 02:00:50

标签: math hash encoding character-encoding

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

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

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

1 个答案:

答案 0 :(得分:1)

如果您只想更改整数的基数

您可以使用base 16(也称为十六进制)代替base64:

>>> hex(1234)[2:]
'4d2'
>>> int('4d2', 16)
1234

或base32:

>>> b32_encode(1234)
b'atja===='
>>> b32_decode(b'atja====')
1234

如果您想要隐藏整数

最简单的方法是将整数乘以某个数字,然后使用更大的随机密钥xor:

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

想要更强大的混淆比需要更多的研究,在这种情况下this类似的问题可能是一个好的起点。