2

これが私が必要とするものです(言語:C#4):

苦情を提出できる制度を構築しています。苦情が提出されると、システム内の苦情を識別する一意の9桁の番号が与えられます。

セキュリティ(隠すことによるセキュリティ)の目的で、チケットIDをシーケンシャルにしたくありません。しかし、データベースを使用してシーケンシャルIDを生成したいと思います

したがって、必要なのは、両方の方法で高速な単射関数です。つまり、連続番号からチケットIDに、そしてチケットIDから連続番号に戻ります。

ticketIdデータベース内がシーケンシャルであるように、ユーザーに表示する前に難読化します。同様に、ユーザーから番号を取得したら、難読化を解除し、データベースで苦情を検索するために使用します。

難読化の部分は、あまり複雑である必要はなく、一般の人々にとっては「十分に明白ではない」だけです。

たとえば、値のビット数を変更するだけで、次のようになります(8ビット値の場合)。

0-> 0
1-> 128
2-> 192
3-> 64
4-> 160
5-> 96

4

3 に答える 3

2

この問題は完全に解決できると思います。定数キーでチケット番号を暗号化します。使用できる32ビットのブロックサイズのブロック暗号があります。

于 2012-07-18T22:43:18.307 に答える
1

対称暗号化に沿った何かを提案します。たとえば、DES暗号化アルゴリズムの置換と拡散の手順を適用すると、すばやく前後にマッピングできるが、パターンを見つけるのが難しい数値を取得できます。これはあなたの例とほとんど同じですが、S-BoxとP-Boxの値は暗号解読に対して効果的であることが証明されています。

于 2012-07-18T22:09:27.317 に答える
0

なぜこのようなことをしないのですか?

番号をSHA1してから、データベースのテーブルに連番と一緒に保存します。次に、ハッシュを受け取ったら、データベースで連番を検索します。

参考までに、これは実際にはセキュリティではありません。実際のパスワードシステムを実装する必要があります。

于 2012-07-18T22:16:50.033 に答える