【问题标题】:Memory locations for rnd() seedrnd() 种子的内存位置
【发布时间】:2021-07-02 20:13:22
【问题描述】:

一直在尝试创建一个小程序来加密/解密文本文件。

想使用已播种 4 个数字 (0-255) 的 RND() 函数。 几年前在我的 Apple IIE 上用 BASIC 做过,效果很好!(255^4=4,294,967,296 个可能的组合)。 将 4 个关键数字“戳”到内存位置,运行一个小循环以打印出 25 个随机数字。 将相同的数字“戳”到内存位置,再次运行程序,结果序列与第一次相同!

还有像几年前一样“偷看”和“戳”的记忆吗?

【问题讨论】:

  • 如果你使用 vb.net,你就不再需要那些旧的实现了。 dotnet 中有很多有助于加密的库
  • 谢谢你们。我已阅读文档,但找不到位置。
  • 随机数生成器的播种是使用 Randomize(Double) 完成的。使用相同的种子将为您提供相同的伪随机数序列。
  • 在 vb.net 中,您可能想要使用 .net Random 类。 .net 通常管理内存。您可以将 Next 方法创建的整数放入 List(Of Integer.
  • 虽然有一些能力可以直接获取进程内存,但这些通常只是目前调试器的专长。几乎总是有一种更明确的方式来做那些在过去直接通过Pokeing 值到内存中完成的事情。除其他事项外,出于安全和稳定性原因,操作系统对于允许程序执行的操作更加明智。

标签: vb.net basic


【解决方案1】:

在这种情况下,您每次运行代码时都会得到相同的数字,因为您提供了种子 17。如果您在没有种子的情况下调用构造函数,您将得到不同的数字。我相信它是由系统时钟播种的。

MS Docs for Random

Private rnd As New Random(17)

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 
    Dim lst As New List(Of Integer)
    For i = 0 To 24
        lst.Add(rnd.Next)
    Next
    For Each item In lst
        Debug.Print(item.ToString)
    Next
End Sub

要将您的数字限制在特定范围内,请将参数传递给 Next 方法。

来自文档。

下一个(Int32) 返回小于指定最大值的非负随机整数。

下一个(Int32,Int32)
返回指定范围内的随机整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2016-09-23
    • 2020-07-24
    相关资源
    最近更新 更多