2016-08-25 18 views
1

我有兩個從0到無限的整數(實際上可能少於100萬,但不想有任何限制)。我想將兩個整數編碼成一個小寫字母數字字符串(可能包含短劃線,但不應該只是數字)。此外,我希望字符串有些隨機(即不要總是以「a」爲前綴)。最重要的要求是我需要能夠輕鬆解碼這個字母數字字符串。我應該如何將兩個整數編碼爲小寫字母數字字符?

我通常只使用md5哈希,但它不適用於這種情況,因爲我不能從md5回到原始整數。我也考慮過Base64,但它不起作用,因爲字符串可能包含大寫字母。

有沒有一種已知的散列算法可以滿足這些要求?

+2

Base-32怎麼樣? –

+1

如果它是可逆的,那麼它就不是一個哈希算法,只是一種編碼算法,是迂腐的。 – Jacob

+0

當你說「有點隨意」時,你是什麼意思?像隨機數據一樣在隨機數據中是隨機的或隨機的? – Jacob

回答

1

如果你只是想改變整數的基礎

相反的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類似的問題可能是一個良好的開端。

+0

謝謝,實際上我發現了一個庫,只是我需要的:https://www.npmjs.com/package/hashids –

相關問題