gpt4 book ai didi

c# - 混淆一个 5 位数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:44 24 4
gpt4 key购买 nike

我想混淆一个 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;

到目前为止,它似乎满足了我的大部分要求。

最佳答案

对于您的需求来说,这可能太简单了,但是 XOR 操作是可行的,而且可能不像加法那样明显:

12345 ^ 65535 = 53190
53190 ^ 65535 = 12345

如评论中所述,重要的是第二个操作数的形式为 (2n - 1) 以避免冲突(以便原始数字中的每一位都被反转)。它还需要足够长,使其位数大于或等于第一个操作数。

您可能还需要用 0 向左填充以使结果成为 5 位数。

关于c# - 混淆一个 5 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14594479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com