我在论坛中看到有人这样的代码:
Dim A As String, B() As Byte, X As Integer
B = A
X = Rnd(-1)
Randomize 123567    '123567是一个密钥
For X = 0 To UBound(B)
  B(X) = B(X) Xor Int(Rnd(1) * 256)
Next X
A = B
我想问的是,这里既然是用随即数来加密的,那解密的时候怎能解密出来呢?除非你能保证解密时候产生的随即数和加密时候一样
谁能为我解释一下。
这里的Randomise是产生随机数种子,种子有何用处?还有就是X = Rnd(-1)为何要这样做?

解决方案 »

  1.   

    我只能解答一部分。Private Sub Command1_Click()
       MsgBox Rnd(1)
    End Sub你要是不加Randomise的话,每次运行都会出现同样的数字。Randomise就是起到每次运行得到的随机数都不一样的目的。
      

  2.   

    Private Sub Command1_Click()
      Randomize 12345
      MsgBox Rnd(1) * 20
    End Sub
    好像不是,我用上面的代码,每次执行程序第一个随即数字都是一样的。并非楼上说的那样
      

  3.   

    wangweinet777(石头) 兄:请将上贴中第二句的“12345”去掉再试试。
      

  4.   


    //MSDN
    Randomize 语句
          初始化随机数生成器。语法Randomize [number]可选的 number 参数是 Variant 或任何有效的数值表达式。说明Randomize 用 number 将 Rnd 函数的随机数生成器初始化,该随机数生成器给 number 一个新的种子值。如果省略 number,则用系统计时器返回的值作为新的种子值。如果没有使用 Randomize,则(无参数的)Rnd 函数使用第一次调用 Rnd 函数的种子值。注意 若想得到重复的随机数序列,在使用具有数值参数的 Randomize 之前直接调用具有负参数值的 Rnd。使用具有同样 number 值的 Randomize 是不会得到重复的随机数序列的。