5桁の数字を難読化したい
気になる難読化された数値のプロパティ:
- 他の難読化された数値と衝突することは不可能です (またはフォールバックとして、非常にありそうもない)
- それも5桁の数字です(アルファベットは使用しないでください)
- 計算の支援がなければ、通常の人間が簡単に決定することはできません (たとえば、「2 を掛けて 5 を引く」のような明白なものではありません)。
- それはアルゴリズムです...可能なすべての5桁の数字のルックアップテーブルを対応するハッシュまたはその他の「ブルートフォース」手法に保存するのとは対照的です
私が気にしない難読化された数値のプロパティ:
- 繰り返し可能かどうか、つまり「12345」が常に「73624」になる場合、私は大丈夫です
- 暗号的に安全かどうか
これまでのところ、私の要件に合ったものは見つかりませんでした...しかし、これは「良い」解決策が存在しないのではなく、記憶力の低下、不完全な教育、または疑わしいライフスタイルの選択によるものであることを願っています.
C# に簡単に変換できる例はおまけです。
アップデート:
今のところ単純なビットマッピングを行うというアイデアを使用して調査しています。
static List<int> bitMapping = new List<int>() { 8, 6, 9, 3, 7, 5, ... etc... };
private static int Obfuscate(int number)
{
var bits = new bool[bitMapping.Count];
foreach (var ordinal in bitMapping)
{
var mask = (int)Math.Pow(2, ordinal);
var bit = (mask & number) == mask;
var mappedOrdinal = bitMapping[ordinal];
bits[mappedOrdinal] = bit;
}
var obfuscatedNumber = 0;
for (var ordinal = 0; ordinal < bits.Length; ordinal++)
{
if (bits[ordinal])
{
obfuscatedNumber += (int)Math.Pow(2, ordinal);
}
}
return obfuscatedNumber;
これまでのところ、私の要件のほとんどを満たしているようです。