使用关键字c#反转随机排列

本文关键字:随机 排列 关键字 | 更新日期: 2023-09-27 18:29:43

我对此相对陌生,我有一个随机函数,它使用关键字作为种子来加密一些数据,即具有纯文本数据"abcd",该函数将随机更改顺序"dcab"。我正在努力想办法反转这个函数,这样我就可以检索回原始的纯文本,即使用关键字将"dcab"转换回"abcd"。我一直在看这里的其他帖子,但我仍然觉得这很难。

以下是功能:

Random random = new Random(q.GetHashCode());
            for (int i = 0; i < data.Length; i++)
            {
                int idx = random.Next(i, data.Length);
                //swap elements
                byte tmp = data[i];
                data[i] = data[idx];
                data[idx] = tmp;
            }

有什么建议吗?

使用关键字c#反转随机排列

这应该可以正常工作:

static void Unpermute(byte[] data, string seed)
{
    Random random = new Random(seed.GetHashCode());
    List<int> swapNumbers = new List<int>(Enumerable.Range(0, data.Length)
        .Select(i => random.Next(i, data.Length)));
    for (int i = data.Length - 1; i >= 0; i--)
    {
        byte temp = data[i];
        data[i] = data[swapNumbers[i]];
        data[swapNumbers[i]] = temp;
    }
}

如果这是一项家庭作业,请告诉我们你是否取得了好成绩。:)

注意:Random类和GetHashCode()方法都被专门记录为依赖于平台。也就是说,每个.NET版本的实现可能有时也会有所不同。上述解决方案假设每个的相同实现方式用于原始排列和非排列。