我想混淆一个 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;
到目前为止,它似乎满足了我的大部分要求。