10進数のシーケンスを取得し、10進数をハッシュ値として返すには、ハッシュ関数が必要です。例えばカスタムハッシュ関数用のPythonライブラリ
:
>> def my_simple_hash(*args):
return reduce(lambda x1, x2: 2*x1 + x2, args)
>>> my_simple_hash(1,3,4)
14
>>> my_simple_hash(1,4,3)
15
>>> my_simple_hash(4,3,1)
23
は私の質問は以下のとおりです。
- Pythonはより効率的にこれを行うにはビルトインのlibを持っているのでしょうか?
- 出力ハッシュ値を比較的小さな範囲にするにはどうすればよいですか?
質問2説明:
1、3、4は、以下のように六つの異なる組み合わせを有するので:
1,3,4
1,4,3
3,1,4
3,4,1
4,1,3
4,3,1
対応する出力が[14, 15, 18, 21, 21, 23]
であり、そしてIはsix
出力のハッシュ値を期待します[1,2,3,4,6]
(小範囲)のようなものになります
どのような提案もありがたいです。あなただけの数の列をハッシュしたい場合は、あなたが行うことができます
私は一般的に独自のロールしないように助言し、代わりに、事実上の衝突( 'hashlib.sha256を()')持っていないことが保証のハッシュとなるだろう。 –
これはあなたが望むものに強く依存します。sha256は、計算が比較的遅く、バイト入力を受け取り、バイト出力を生成する暗号ハッシュ関数です。良い非暗号化ハッシュは計算が速く、結果の値が均等に分布し、あまり多くの衝突もない。 – janbrohl
このハッシュで何をするつもりですか?入力整数の範囲はどれくらいですか?入力シーケンスの典型的なサイズは?出力の範囲はどれくらい大きくなるのですか?衝突回避はどれくらい重要ですか?あなたのニーズは、完全な暗号強度の実装か、より高速で簡単なバージョンのいずれかである[フォーマット維持の暗号化](https://en.wikipedia.org/wiki/Format-preserving_encryption)の変種によって満たされるかもしれません。 –