使用关键字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;
}
有什么建议吗?
这应该可以正常工作:
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版本的实现可能有时也会有所不同。上述解决方案假设每个的相同实现方式用于原始排列和非排列。