我有兩個從0到無限的整數(實際上可能少於100萬,但不想有任何限制)。我想將兩個整數編碼成一個小寫字母數字字符串(可能包含短劃線,但不應該只是數字)。此外,我希望字符串有些隨機(即不要總是以「a」爲前綴)。最重要的要求是我需要能夠輕鬆解碼這個字母數字字符串。我應該如何將兩個整數編碼爲小寫字母數字字符?
我通常只使用md5哈希,但它不適用於這種情況,因爲我不能從md5回到原始整數。我也考慮過Base64,但它不起作用,因爲字符串可能包含大寫字母。
有沒有一種已知的散列算法可以滿足這些要求?
我有兩個從0到無限的整數(實際上可能少於100萬,但不想有任何限制)。我想將兩個整數編碼成一個小寫字母數字字符串(可能包含短劃線,但不應該只是數字)。此外,我希望字符串有些隨機(即不要總是以「a」爲前綴)。最重要的要求是我需要能夠輕鬆解碼這個字母數字字符串。我應該如何將兩個整數編碼爲小寫字母數字字符?
我通常只使用md5哈希,但它不適用於這種情況,因爲我不能從md5回到原始整數。我也考慮過Base64,但它不起作用,因爲字符串可能包含大寫字母。
有沒有一種已知的散列算法可以滿足這些要求?
相反的base64的,你可以使用基16(又名十六進制):
>>> 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類似的問題可能是一個良好的開端。
謝謝,實際上我發現了一個庫,只是我需要的:https://www.npmjs.com/package/hashids –
Base-32怎麼樣? –
如果它是可逆的,那麼它就不是一個哈希算法,只是一種編碼算法,是迂腐的。 – Jacob
當你說「有點隨意」時,你是什麼意思?像隨機數據一樣在隨機數據中是隨機的或隨機的? – Jacob