0

我有一个简单的函数,用模运算符处理溢出

   Private Function RandomizeBlock(seed As Integer, ByVal block() As Byte) As Byte()
        Dim Generator As System.Random = New System.Random(seed)
        Dim newblock(255) As Byte
        Dim i As Integer = 0
        For i = 0 To block.Length - 1
            newblock(i) = (block(i) + Generator.Next(0, 256)) Mod 256
        Next

        Return newblock
    End Function

如何撤消对块进行的随机化?

我知道 mod 是这样工作的:

253,254,255,0,1,2,3,4覆盖在0.

我能找到这里的倒数reverse吗?

rndValue = Generator.Next(0, 256)
reverse_1 = ((256 - rndValue) + block(i)) Mod 256
reverse_2 = ((256 + rndValue) - block(i)) Mod 256
4

1 回答 1

1

如果您知道随机值,那么重建原始值非常简单。

您只需要记住工作模数p,您没有实际数字,而是余数类。p通常使用第一个自然数作为这些类的代表。幸运的是,减法和加法与余数类完全兼容。

VB的Mod实现将任何正数转换为其余数类的代表。但是,它不能对负数执行此操作。你必须自己做。

长话短说,这是代码:

Dim reverse As Integer = block(i) - rndValue;
If reverse < 0 Then reverse = reverse + 256 'Convert to representative of remainder class
于 2016-08-03T21:22:03.430 回答