2016-08-25 6 views
1

私は0から無限大の2つの整数を持っています(実際には100万未満ですが、制限はありません)。私は2つの整数を小文字の英数字の文字列(ダッシュを含むかもしれませんが、数字ではないはずです)にエンコードしたいと思います。また、文字列を多少ランダムにしたい(つまり、すべてのintに "a"などの接頭辞をつけたくない)。最も重要な要件は、この英数字の文字列を簡単に解読できるようにする必要があることです。2つの整数を小文字の英数字にエンコードする方法はありますか?

通常はmd5ハッシュを使用しますが、md5から元の整数に戻ることはできないため、このケースでは機能しません。私はBase64も考慮しましたが、文字列に大文字が含まれる可能性があるため動作しません。

これらの要件を満たす既知のハッシングアルゴリズムはありますか?

+2

Base-32はどうですか? –

+1

リバース可能な場合はハッシュアルゴリズムではなく、単にエンコードアルゴリズムであればペダンティカルになります。 – Jacob

+0

「ややランダム」と言ったら、どういう意味ですか?シーケンシャル値のために高度に分散されているように、予測不可能またはランダムのようにランダム? – Jacob

答えて

1

あなただけの整数のベース

代わりのBASE64を変更するために探しているなら、あなたは(16進数別名)ベース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 –

関連する問題