vba rnd

介绍

VBA Rnd()函数通常用于生成“随机”数字。 当然,您无法使用任何编程算法生成真正的随机数。 但是某些伪随机数生成器算法要比其他算法好。 本文讨论了为什么本机PRNG不好的原因,以及在真正需要“随机性”的情况下可以使用的替代方法。

VBA如何生成其随机数

资源:

https://support.microsoft.com/zh-CN/kb/231847

虽然以上链接的文章适用于VB 6.0,但VBA基于相同的代码库。 通过手动计算VB 6.0算法中的前几个数字并将其与VBA输出进行比较,我可以确认它是否使用相同的算法。

基本上,它使用递归函数生成其随机数。

x1 = ( x0 * 1140671485 + 12820163 ) MOD (2^24)
return x1 / (2^24)

第一次运行时x0 = 327680,否则,使用先前计算的值。 问题

Rnd()实现的一个问题是周期短,这意味着它在开始重复自身之前可以生成的数量。 生成2 ^ 24个数字后,它将开始重复数字。

另一个问题是它是串行相关的。 这意味着了解该函数的前几个输出将揭示可用于预测未来输出的信息。 如果您可以开始预测其“随机”输出,就无法真正调用随机的东西。

对于某些应用程序来说,这不是问题,但如果您确实需要随机数,则可能会带来问题。 例如,如果仅使用它来生成一个小的随机样本以将总体分为两组,则可能无关紧要。 但这是一个主要问题,如果您想为彩票游戏生成随机数。

解决方案

虽然还有许多其他PRNG算法,例如

Mersenne Twister ,您可以实现不会受到这些问题困扰的解决方案,我的解决方案基于已经拥有的代码库:加密算法。

基本上,密码学是一种精美的PRNG。 密码学的目的是获取密码(即种子)并将其用于将数据编码为不可预测的(即伪随机)形式。

因此,您可以采用任何足够强大的加密算法并将其转换为PRNG。 执行此操作的方法是在计数器模式下运行算法。 也就是说,当您要开始生成随机数时,可以使用种子作为密码,并从数字0开始加密。然后对数字1进行加密,然后对2进行加密,依此类推。 当然,您可以以任何数字开头,而不必每次都加1。 这只是简单的例子。

代码

下面的代码是在计数器模式下使用zmbd的VBScript AES代码的VBA实现的示例实现。

AES代码略有修改,以将纯文本输入作为字符串而不是文件。 并且由于它一次只能编码1个块,因此某些循环已被删除。

您可以删除其他加密算法来代替AES函数,只要它产生至少8个字节的字符串输出即可。 AES每个块产生一个16字节的输出,因此此实现将丢弃最后8个字节,以避免溢出双精度型。

https://bytes.com/topic/access/insig...m-vba-vbscript

Option Compare Database
Option Explicit
Dim iSeed As Double
Dim iCounter As Double
Function RNG(seed As Double)Dim sCounter As String, sPassin As StringDim i As Integer, sResult As String, dResult As Double If iSeed <> seed TheniCounter = 0End If iSeed = seediCounter = iCounter + 1sCounter = ""sPassin = "" For i = 0 To 7sPassin = sPassin & Chr((iSeed / (256 ^ i)) And 255)sCounter = sCounter & Chr((iCounter / (256 ^ i)) And 255)Next sResult = RunAES(sCounter, sPassin)dResult = 0 For i = 1 To 8dResult = dResult + Asc(Mid(sResult, i, 1)) * (256 ^ (i - 1))Next RNG = dResult / (256 ^ 8)
End Function
Function RunAES(sCounter, sPassin)Dim sbox(), sboxinv(), rcon()Dim g2, g3, g9, g11, g13, g14 g2 = Array( _&H0, &H2, &H4, &H6, &H8, &HA, &HC, &HE, &H10, &H12, &H14, &H16, &H18, &H1A, &H1C, &H1E, _&H20, &H22, &H24, &H26, &H28, &H2A, &H2C, &H2E, &H30, &H32, &H34, &H36, &H38, &H3A, &H3C, &H3E, _&H40, &H42, &H44, &H46, &H48, &H4A, &H4C, &H4E, &H50, &H52, &H54, &H56, &H58, &H5A, &H5C, &H5E, _&H60, &H62, &H64, &H66, &H68, &H6A, &H6C, &H6E, &H70, &H72, &H74, &H76, &H78, &H7A, &H7C, &H7E, _&H80, &H82, &H84, &H86, &H88, &H8A, &H8C, &H8E, &H90, &H92, &H94, &H96, &H98, &H9A, &H9C, &H9E, _&HA0, &HA2, &HA4, &HA6, &HA8, &HAA, &HAC, &HAE, &HB0, &HB2, &HB4, &HB6, &HB8, &HBA, &HBC, &HBE, _&HC0, &HC2, &HC4, &HC6, &HC8, &HCA, &HCC, &HCE, &HD0, &HD2, &HD4, &HD6, &HD8, &HDA, &HDC, &HDE, _&HE0, &HE2, &HE4, &HE6, &HE8, &HEA, &HEC, &HEE, &HF0, &HF2, &HF4, &HF6, &HF8, &HFA, &HFC, &HFE, _&H1B, &H19, &H1F, &H1D, &H13, &H11, &H17, &H15, &HB, &H9, &HF, &HD, &H3, &H1, &H7, &H5, _&H3B, &H39, &H3F, &H3D, &H33, &H31, &H37, &H35, &H2B, &H29, &H2F, &H2D, &H23, &H21, &H27, &H25, _&H5B, &H59, &H5F, &H5D, &H53, &H51, &H57, &H55, &H4B, &H49, &H4F, &H4D, &H43, &H41, &H47, &H45, _&H7B, &H79, &H7F, &H7D, &H73, &H71, &H77, &H75, &H6B, &H69, &H6F, &H6D, &H63, &H61, &H67, &H65, _&H9B, &H99, &H9F, &H9D, &H93, &H91, &H97, &H95, &H8B, &H89, &H8F, &H8D, &H83, &H81, &H87, &H85, _&HBB, &HB9, &HBF, &HBD, &HB3, &HB1, &HB7, &HB5, &HAB, &HA9, &HAF, &HAD, &HA3, &HA1, &HA7, &HA5, _&HDB, &HD9, &HDF, &HDD, &HD3, &HD1, &HD7, &HD5, &HCB, &HC9, &HCF, &HCD, &HC3, &HC1, &HC7, &HC5, _&HFB, &HF9, &HFF, &HFD, &HF3, &HF1, &HF7, &HF5, &HEB, &HE9, &HEF, &HED, &HE3, &HE1, &HE7, &HE5) g3 = Array( _&H0, &H3, &H6, &H5, &HC, &HF, &HA, &H9, &H18, &H1B, &H1E, &H1D, &H14, &H17, &H12, &H11, _&H30, &H33, &H36, &H35, &H3C, &H3F, &H3A, &H39, &H28, &H2B, &H2E, &H2D, &H24, &H27, &H22, &H21, _&H60, &H63, &H66, &H65, &H6C, &H6F, &H6A, &H69, &H78, &H7B, &H7E, &H7D, &H74, &H77, &H72, &H71, _&H50, &H53, &H56, &H55, &H5C, &H5F, &H5A, &H59, &H48, &H4B, &H4E, &H4D, &H44, &H47, &H42, &H41, _&HC0, &HC3, &HC6, &HC5, &HCC, &HCF, &HCA, &HC9, &HD8, &HDB, &HDE, &HDD, &HD4, &HD7, &HD2, &HD1, _&HF0, &HF3, &HF6, &HF5, &HFC, &HFF, &HFA, &HF9, &HE8, &HEB, &HEE, &HED, &HE4, &HE7, &HE2, &HE1, _&HA0, &HA3, &HA6, &HA5, &HAC, &HAF, &HAA, &HA9, &HB8, &HBB, &HBE, &HBD, &HB4, &HB7, &HB2, &HB1, _&H90, &H93, &H96, &H95, &H9C, &H9F, &H9A, &H99, &H88, &H8B, &H8E, &H8D, &H84, &H87, &H82, &H81, _&H9B, &H98, &H9D, &H9E, &H97, &H94, &H91, &H92, &H83, &H80, &H85, &H86, &H8F, &H8C, &H89, &H8A, _&HAB, &HA8, &HAD, &HAE, &HA7, &HA4, &HA1, &HA2, &HB3, &HB0, &HB5, &HB6, &HBF, &HBC, &HB9, &HBA, _&HFB, &HF8, &HFD, &HFE, &HF7, &HF4, &HF1, &HF2, &HE3, &HE0, &HE5, &HE6, &HEF, &HEC, &HE9, &HEA, _&HCB, &HC8, &HCD, &HCE, &HC7, &HC4, &HC1, &HC2, &HD3, &HD0, &HD5, &HD6, &HDF, &HDC, &HD9, &HDA, _&H5B, &H58, &H5D, &H5E, &H57, &H54, &H51, &H52, &H43, &H40, &H45, &H46, &H4F, &H4C, &H49, &H4A, _&H6B, &H68, &H6D, &H6E, &H67, &H64, &H61, &H62, &H73, &H70, &H75, &H76, &H7F, &H7C, &H79, &H7A, _&H3B, &H38, &H3D, &H3E, &H37, &H34, &H31, &H32, &H23, &H20, &H25, &H26, &H2F, &H2C, &H29, &H2A, _&HB, &H8, &HD, &HE, &H7, &H4, &H1, &H2, &H13, &H10, &H15, &H16, &H1F, &H1C, &H19, &H1A) g9 = Array( _&H0, &H9, &H12, &H1B, &H24, &H2D, &H36, &H3F, &H48, &H41, &H5A, &H53, &H6C, &H65, &H7E, &H77, _&H90, &H99, &H82, &H8B, &HB4, &HBD, &HA6, &HAF, &HD8, &HD1, &HCA, &HC3, &HFC, &HF5, &HEE, &HE7, _&H3B, &H32, &H29, &H20, &H1F, &H16, &HD, &H4, &H73, &H7A, &H61, &H68, &H57, &H5E, &H45, &H4C, _&HAB, &HA2, &HB9, &HB0, &H8F, &H86, &H9D, &H94, &HE3, &HEA, &HF1, &HF8, &HC7, &HCE, &HD5, &HDC, _&H76, &H7F, &H64, &H6D, &H52, &H5B, &H40, &H49, &H3E, &H37, &H2C, &H25, &H1A, &H13, &H8, &H1, _&HE6, &HEF, &HF4, &HFD, &HC2, &HCB, &HD0, &HD9, &HAE, &HA7, &HBC, &HB5, &H8A, &H83, &H98, &H91, _&H4D, &H44, &H5F, &H56, &H69, &H60, &H7B, &H72, &H5, &HC, &H17, &H1E, &H21, &H28, &H33, &H3A, _&HDD, &HD4, &HCF, &HC6, &HF9, &HF0, &HEB, &HE2, &H95, &H9C, &H87, &H8E, &HB1, &HB8, &HA3, &HAA, _&HEC, &HE5, &HFE, &HF7, &HC8, &HC1, &HDA, &HD3, &HA4, &HAD, &HB6, &HBF, &H80, &H89, &H92, &H9B, _&H7C, &H75, &H6E, &H67, &H58, &H51, &H4A, &H43, &H34, &H3D, &H26, &H2F, &H10, &H19, &H2, &HB, _&HD7, &HDE, &HC5, &HCC, &HF3, &HFA, &HE1, &HE8, &H9F, &H96, &H8D, &H84, &HBB, &HB2, &HA9, &HA0, _&H47, &H4E, &H55, &H5C, &H63, &H6A, &H71, &H78, &HF, &H6, &H1D, &H14, &H2B, &H22, &H39, &H30, _&H9A, &H93, &H88, &H81, &HBE, &HB7, &HAC, &HA5, &HD2, &HDB, &HC0, &HC9, &HF6, &HFF, &HE4, &HED, _&HA, &H3, &H18, &H11, &H2E, &H27, &H3C, &H35, &H42, &H4B, &H50, &H59, &H66, &H6F, &H74, &H7D, _&HA1, &HA8, &HB3, &HBA, &H85, &H8C, &H97, &H9E, &HE9, &HE0, &HFB, &HF2, &HCD, &HC4, &HDF, &HD6, _&H31, &H38, &H23, &H2A, &H15, &H1C, &H7, &HE, &H79, &H70, &H6B, &H62, &H5D, &H54, &H4F, &H46) g11 = Array( _&H0, &HB, &H16, &H1D, &H2C, &H27, &H3A, &H31, &H58, &H53, &H4E, &H45, &H74, &H7F, &H62, &H69, _&HB0, &HBB, &HA6, &HAD, &H9C, &H97, &H8A, &H81, &HE8, &HE3, &HFE, &HF5, &HC4, &HCF, &HD2, &HD9, _&H7B, &H70, &H6D, &H66, &H57, &H5C, &H41, &H4A, &H23, &H28, &H35, &H3E, &HF, &H4, &H19, &H12, _&HCB, &HC0, &HDD, &HD6, &HE7, &HEC, &HF1, &HFA, &H93, &H98, &H85, &H8E, &HBF, &HB4, &HA9, &HA2, _&HF6, &HFD, &HE0, &HEB, &HDA, &HD1, &HCC, &HC7, &HAE, &HA5, &HB8, &HB3, &H82, &H89, &H94, &H9F, _&H46, &H4D, &H50, &H5B, &H6A, &H61, &H7C, &H77, &H1E, &H15, &H8, &H3, &H32, &H39, &H24, &H2F, _&H8D, &H86, &H9B, &H90, &HA1, &HAA, &HB7, &HBC, &HD5, &HDE, &HC3, &HC8, &HF9, &HF2, &HEF, &HE4, _&H3D, &H36, &H2B, &H20, &H11, &H1A, &H7, &HC, &H65, &H6E, &H73, &H78, &H49, &H42, &H5F, &H54, _&HF7, &HFC, &HE1, &HEA, &HDB, &HD0, &HCD, &HC6, &HAF, &HA4, &HB9, &HB2, &H83, &H88, &H95, &H9E, _&H47, &H4C, &H51, &H5A, &H6B, &H60, &H7D, &H76, &H1F, &H14, &H9, &H2, &H33, &H38, &H25, &H2E, _&H8C, &H87, &H9A, &H91, &HA0, &HAB, &HB6, &HBD, &HD4, &HDF, &HC2, &HC9, &HF8, &HF3, &HEE, &HE5, _&H3C, &H37, &H2A, &H21, &H10, &H1B, &H6, &HD, &H64, &H6F, &H72, &H79, &H48, &H43, &H5E, &H55, _&H1, &HA, &H17, &H1C, &H2D, &H26, &H3B, &H30, &H59, &H52, &H4F, &H44, &H75, &H7E, &H63, &H68, _&HB1, &HBA, &HA7, &HAC, &H9D, &H96, &H8B, &H80, &HE9, &HE2, &HFF, &HF4, &HC5, &HCE, &HD3, &HD8, _&H7A, &H71, &H6C, &H67, &H56, &H5D, &H40, &H4B, &H22, &H29, &H34, &H3F, &HE, &H5, &H18, &H13, _&HCA, &HC1, &HDC, &HD7, &HE6, &HED, &HF0, &HFB, &H92, &H99, &H84, &H8F, &HBE, &HB5, &HA8, &HA3) g13 = Array( _&H0, &HD, &H1A, &H17, &H34, &H39, &H2E, &H23, &H68, &H65, &H72, &H7F, &H5C, &H51, &H46, &H4B, _&HD0, &HDD, &HCA, &HC7, &HE4, &HE9, &HFE, &HF3, &HB8, &HB5, &HA2, &HAF, &H8C, &H81, &H96, &H9B, _&HBB, &HB6, &HA1, &HAC, &H8F, &H82, &H95, &H98, &HD3, &HDE, &HC9, &HC4, &HE7, &HEA, &HFD, &HF0, _&H6B, &H66, &H71, &H7C, &H5F, &H52, &H45, &H48, &H3, &HE, &H19, &H14, &H37, &H3A, &H2D, &H20, _&H6D, &H60, &H77, &H7A, &H59, &H54, &H43, &H4E, &H5, &H8, &H1F, &H12, &H31, &H3C, &H2B, &H26, _&HBD, &HB0, &HA7, &HAA, &H89, &H84, &H93, &H9E, &HD5, &HD8, &HCF, &HC2, &HE1, &HEC, &HFB, &HF6, _&HD6, &HDB, &HCC, &HC1, &HE2, &HEF, &HF8, &HF5, &HBE, &HB3, &HA4, &HA9, &H8A, &H87, &H90, &H9D, _&H6, &HB, &H1C, &H11, &H32, &H3F, &H28, &H25, &H6E, &H63, &H74, &H79, &H5A, &H57, &H40, &H4D, _&HDA, &HD7, &HC0, &HCD, &HEE, &HE3, &HF4, &HF9, &HB2, &HBF, &HA8, &HA5, &H86, &H8B, &H9C, &H91, _&HA, &H7, &H10, &H1D, &H3E, &H33, &H24, &H29, &H62, &H6F, &H78, &H75, &H56, &H5B, &H4C, &H41, _&H61, &H6C, &H7B, &H76, &H55, &H58, &H4F, &H42, &H9, &H4, &H13, &H1E, &H3D, &H30, &H27, &H2A, _&HB1, &HBC, &HAB, &HA6, &H85, &H88, &H9F, &H92, &HD9, &HD4, &HC3, &HCE, &HED, &HE0, &HF7, &HFA, _&HB7, &HBA, &HAD, &HA0, &H83, &H8E, &H99, &H94, &HDF, &HD2, &HC5, &HC8, &HEB, &HE6, &HF1, &HFC, _&H67, &H6A, &H7D, &H70, &H53, &H5E, &H49, &H44, &HF, &H2, &H15, &H18, &H3B, &H36, &H21, &H2C, _&HC, &H1, &H16, &H1B, &H38, &H35, &H22, &H2F, &H64, &H69, &H7E, &H73, &H50, &H5D, &H4A, &H47, _&HDC, &HD1, &HC6, &HCB, &HE8, &HE5, &HF2, &HFF, &HB4, &HB9, &HAE, &HA3, &H80, &H8D, &H9A, &H97) g14 = Array( _&H0, &HE, &H1C, &H12, &H38, &H36, &H24, &H2A, &H70, &H7E, &H6C, &H62, &H48, &H46, &H54, &H5A, _&HE0, &HEE, &HFC, &HF2, &HD8, &HD6, &HC4, &HCA, &H90, &H9E, &H8C, &H82, &HA8, &HA6, &HB4, &HBA, _&HDB, &HD5, &HC7, &HC9, &HE3, &HED, &HFF, &HF1, &HAB, &HA5, &HB7, &HB9, &H93, &H9D, &H8F, &H81, _&H3B, &H35, &H27, &H29, &H3, &HD, &H1F, &H11, &H4B, &H45, &H57, &H59, &H73, &H7D, &H6F, &H61, _&HAD, &HA3, &HB1, &HBF, &H95, &H9B, &H89, &H87, &HDD, &HD3, &HC1, &HCF, &HE5, &HEB, &HF9, &HF7, _&H4D, &H43, &H51, &H5F, &H75, &H7B, &H69, &H67, &H3D, &H33, &H21, &H2F, &H5, &HB, &H19, &H17, _&H76, &H78, &H6A, &H64, &H4E, &H40, &H52, &H5C, &H6, &H8, &H1A, &H14, &H3E, &H30, &H22, &H2C, _&H96, &H98, &H8A, &H84, &HAE, &HA0, &HB2, &HBC, &HE6, &HE8, &HFA, &HF4, &HDE, &HD0, &HC2, &HCC, _&H41, &H4F, &H5D, &H53, &H79, &H77, &H65, &H6B, &H31, &H3F, &H2D, &H23, &H9, &H7, &H15, &H1B, _&HA1, &HAF, &HBD, &HB3, &H99, &H97, &H85, &H8B, &HD1, &HDF, &HCD, &HC3, &HE9, &HE7, &HF5, &HFB, _&H9A, &H94, &H86, &H88, &HA2, &HAC, &HBE, &HB0, &HEA, &HE4, &HF6, &HF8, &HD2, &HDC, &HCE, &HC0, _&H7A, &H74, &H66, &H68, &H42, &H4C, &H5E, &H50, &HA, &H4, &H16, &H18, &H32, &H3C, &H2E, &H20, _&HEC, &HE2, &HF0, &HFE, &HD4, &HDA, &HC8, &HC6, &H9C, &H92, &H80, &H8E, &HA4, &HAA, &HB8, &HB6, _&HC, &H2, &H10, &H1E, &H34, &H3A, &H28, &H26, &H7C, &H72, &H60, &H6E, &H44, &H4A, &H58, &H56, _&H37, &H39, &H2B, &H25, &HF, &H1, &H13, &H1D, &H47, &H49, &H5B, &H55, &H7F, &H71, &H63, &H6D, _&HD7, &HD9, &HCB, &HC5, &HEF, &HE1, &HF3, &HFD, &HA7, &HA9, &HBB, &HB5, &H9F, &H91, &H83, &H8D) sbox = Array( _&H63, &H7C, &H77, &H7B, &HF2, &H6B, &H6F, &HC5, &H30, &H1, &H67, &H2B, &HFE, &HD7, &HAB, &H76, _&HCA, &H82, &HC9, &H7D, &HFA, &H59, &H47, &HF0, &HAD, &HD4, &HA2, &HAF, &H9C, &HA4, &H72, &HC0, _&HB7, &HFD, &H93, &H26, &H36, &H3F, &HF7, &HCC, &H34, &HA5, &HE5, &HF1, &H71, &HD8, &H31, &H15, _&H4, &HC7, &H23, &HC3, &H18, &H96, &H5, &H9A, &H7, &H12, &H80, &HE2, &HEB, &H27, &HB2, &H75, _&H9, &H83, &H2C, &H1A, &H1B, &H6E, &H5A, &HA0, &H52, &H3B, &HD6, &HB3, &H29, &HE3, &H2F, &H84, _&H53, &HD1, &H0, &HED, &H20, &HFC, &HB1, &H5B, &H6A, &HCB, &HBE, &H39, &H4A, &H4C, &H58, &HCF, _&HD0, &HEF, &HAA, &HFB, &H43, &H4D, &H33, &H85, &H45, &HF9, &H2, &H7F, &H50, &H3C, &H9F, &HA8, _&H51, &HA3, &H40, &H8F, &H92, &H9D, &H38, &HF5, &HBC, &HB6, &HDA, &H21, &H10, &HFF, &HF3, &HD2, _&HCD, &HC, &H13, &HEC, &H5F, &H97, &H44, &H17, &HC4, &HA7, &H7E, &H3D, &H64, &H5D, &H19, &H73, _&H60, &H81, &H4F, &HDC, &H22, &H2A, &H90, &H88, &H46, &HEE, &HB8, &H14, &HDE, &H5E, &HB, &HDB, _&HE0, &H32, &H3A, &HA, &H49, &H6, &H24, &H5C, &HC2, &HD3, &HAC, &H62, &H91, &H95, &HE4, &H79, _&HE7, &HC8, &H37, &H6D, &H8D, &HD5, &H4E, &HA9, &H6C, &H56, &HF4, &HEA, &H65, &H7A, &HAE, &H8, _&HBA, &H78, &H25, &H2E, &H1C, &HA6, &HB4, &HC6, &HE8, &HDD, &H74, &H1F, &H4B, &HBD, &H8B, &H8A, _&H70, &H3E, &HB5, &H66, &H48, &H3, &HF6, &HE, &H61, &H35, &H57, &HB9, &H86, &HC1, &H1D, &H9E, _&HE1, &HF8, &H98, &H11, &H69, &HD9, &H8E, &H94, &H9B, &H1E, &H87, &HE9, &HCE, &H55, &H28, &HDF, _&H8C, &HA1, &H89, &HD, &HBF, &HE6, &H42, &H68, &H41, &H99, &H2D, &HF, &HB0, &H54, &HBB, &H16) sboxinv = Array( _&H52, &H9, &H6A, &HD5, &H30, &H36, &HA5, &H38, &HBF, &H40, &HA3, &H9E, &H81, &HF3, &HD7, &HFB, _&H7C, &HE3, &H39, &H82, &H9B, &H2F, &HFF, &H87, &H34, &H8E, &H43, &H44, &HC4, &HDE, &HE9, &HCB, _&H54, &H7B, &H94, &H32, &HA6, &HC2, &H23, &H3D, &HEE, &H4C, &H95, &HB, &H42, &HFA, &HC3, &H4E, _&H8, &H2E, &HA1, &H66, &H28, &HD9, &H24, &HB2, &H76, &H5B, &HA2, &H49, &H6D, &H8B, &HD1, &H25, _&H72, &HF8, &HF6, &H64, &H86, &H68, &H98, &H16, &HD4, &HA4, &H5C, &HCC, &H5D, &H65, &HB6, &H92, _&H6C, &H70, &H48, &H50, &HFD, &HED, &HB9, &HDA, &H5E, &H15, &H46, &H57, &HA7, &H8D, &H9D, &H84, _&H90, &HD8, &HAB, &H0, &H8C, &HBC, &HD3, &HA, &HF7, &HE4, &H58, &H5, &HB8, &HB3, &H45, &H6, _&HD0, &H2C, &H1E, &H8F, &HCA, &H3F, &HF, &H2, &HC1, &HAF, &HBD, &H3, &H1, &H13, &H8A, &H6B, _&H3A, &H91, &H11, &H41, &H4F, &H67, &HDC, &HEA, &H97, &HF2, &HCF, &HCE, &HF0, &HB4, &HE6, &H73, _&H96, &HAC, &H74, &H22, &HE7, &HAD, &H35, &H85, &HE2, &HF9, &H37, &HE8, &H1C, &H75, &HDF, &H6E, _&H47, &HF1, &H1A, &H71, &H1D, &H29, &HC5, &H89, &H6F, &HB7, &H62, &HE, &HAA, &H18, &HBE, &H1B, _&HFC, &H56, &H3E, &H4B, &HC6, &HD2, &H79, &H20, &H9A, &HDB, &HC0, &HFE, &H78, &HCD, &H5A, &HF4, _&H1F, &HDD, &HA8, &H33, &H88, &H7, &HC7, &H31, &HB1, &H12, &H10, &H59, &H27, &H80, &HEC, &H5F, _&H60, &H51, &H7F, &HA9, &H19, &HB5, &H4A, &HD, &H2D, &HE5, &H7A, &H9F, &H93, &HC9, &H9C, &HEF, _&HA0, &HE0, &H3B, &H4D, &HAE, &H2A, &HF5, &HB0, &HC8, &HEB, &HBB, &H3C, &H83, &H53, &H99, &H61, _&H17, &H2B, &H4, &H7E, &HBA, &H77, &HD6, &H26, &HE1, &H69, &H14, &H63, &H55, &H21, &HC, &H7D) rcon = Array( _&H8D, &H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80, &H1B, &H36, &H6C, &HD8, &HAB, &H4D, &H9A, _&H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, &HC5, &H91, &H39, _&H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, &H25, &H4A, &H94, &H33, &H66, &HCC, &H83, &H1D, &H3A, _&H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80, &H1B, &H36, &H6C, &HD8, _&HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, _&HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, &H25, &H4A, &H94, &H33, &H66, &HCC, _&H83, &H1D, &H3A, &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80, &H1B, _&H36, &H6C, &HD8, &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, &H6A, &HD4, &HB3, _&H7D, &HFA, &HEF, &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, &H25, &H4A, &H94, _&H33, &H66, &HCC, &H83, &H1D, &H3A, &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, &H8, &H10, &H20, _&H40, &H80, &H1B, &H36, &H6C, &HD8, &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, _&H6A, &HD4, &HB3, &H7D, &HFA, &HEF, &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, _&H25, &H4A, &H94, &H33, &H66, &HCC, &H83, &H1D, &H3A, &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, _&H8, &H10, &H20, &H40, &H80, &H1B, &H36, &H6C, &HD8, &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, _&HC6, &H97, &H35, &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, _&H61, &HC2, &H9F, &H25, &H4A, &H94, &H33, &H66, &HCC, &H83, &H1D, &H3A, &H74, &HE8, &HCB) Dim expandedKey, block(16), aesKey(32), i, j, isEncodeDim sPlain, sPass, sCipher, sTemp, nonce(16), priorCipher(16)Dim x, r, y, temp(4), intTemp For i = 0 To 15nonce(i) = 0Next For i = 0 To (Len(sPassin) - 1)aesKey(i) = Asc(Mid(sPassin, i + 1, 1))Next For i = Len(sPassin) To 31aesKey(i) = 0Next expandedKey = expandKey(aesKey, sbox, rcon) sPlain = sCountersCipher = ""j = 0 sTemp = Mid(sPlain, j * 16 + 1, 16) If Len(sTemp) < 16 ThenFor i = Len(sTemp) To 15sTemp = sTemp & Chr(0)NextEnd If For i = 0 To 15block(i) = Asc(Mid(sTemp, (i Mod 4) * 4 + (i \ 4) + 1, 1))Next j = j + 1r = 0For i = 0 To 15block(i) = block(i) Xor nonce(i) Xor expandedKey((i Mod 4) * 4 + (i \ 4))Next For x = 1 To 13block(0) = sbox(block(0))block(1) = sbox(block(1))block(2) = sbox(block(2))block(3) = sbox(block(3)) intTemp = sbox(block(4))block(4) = sbox(block(5))block(5) = sbox(block(6))block(6) = sbox(block(7))block(7) = intTemp intTemp = sbox(block(8))block(8) = sbox(block(10))block(10) = intTempintTemp = sbox(block(9))block(9) = sbox(block(11))block(11) = intTemp intTemp = sbox(block(12))block(12) = sbox(block(15))block(15) = sbox(block(14))block(14) = sbox(block(13))block(13) = intTemp r = x * 16For i = 0 To 3temp(0) = block(i)temp(1) = block(i + 4)temp(2) = block(i + 8)temp(3) = block(i + 12) block(i) = g2(temp(0)) Xor temp(3) Xor temp(2) Xor g3(temp(1)) Xor expandedKey(r + i * 4)block(i + 4) = g2(temp(1)) Xor temp(0) Xor temp(3) Xor g3(temp(2)) Xor expandedKey(r + i * 4 + 1)block(i + 8) = g2(temp(2)) Xor temp(1) Xor temp(0) Xor g3(temp(3)) Xor expandedKey(r + i * 4 + 2)block(i + 12) = g2(temp(3)) Xor temp(2) Xor temp(1) Xor g3(temp(0)) Xor expandedKey(r + i * 4 + 3)NextNext block(0) = sbox(block(0)) Xor expandedKey(224)block(1) = sbox(block(1)) Xor expandedKey(228)block(2) = sbox(block(2)) Xor expandedKey(232)block(3) = sbox(block(3)) Xor expandedKey(236) intTemp = sbox(block(4)) Xor expandedKey(237)block(4) = sbox(block(5)) Xor expandedKey(225)block(5) = sbox(block(6)) Xor expandedKey(229)block(6) = sbox(block(7)) Xor expandedKey(233)block(7) = intTemp intTemp = sbox(block(8)) Xor expandedKey(234)block(8) = sbox(block(10)) Xor expandedKey(226)block(10) = intTempintTemp = sbox(block(9)) Xor expandedKey(238)block(9) = sbox(block(11)) Xor expandedKey(230)block(11) = intTemp intTemp = sbox(block(12)) Xor expandedKey(231)block(12) = sbox(block(15)) Xor expandedKey(227)block(15) = sbox(block(14)) Xor expandedKey(239)block(14) = sbox(block(13)) Xor expandedKey(235)block(13) = intTemp For i = 0 To 15nonce(i) = block(i)Next For i = 0 To 15sCipher = sCipher & Chr(block((i Mod 4) * 4 + (i \ 4)))Next RunAES = sCipher
End Function
Function expandKey(ByRef key(), ByRef box(), ByRef rcon())'MOD added () to array variablesDim rConIter, temp(), i, result(240) ReDim temp(4)rConIter = 1 For i = 0 To 31result(i) = key(i)Next For i = 32 To 239 Step 4temp(0) = result(i - 4)temp(1) = result(i - 3)temp(2) = result(i - 2)temp(3) = result(i - 1) If i Mod 32 = 0 Thentemp = keyScheduleCore(temp, rConIter, box, rcon)rConIter = rConIter + 1End If If i Mod 32 = 16 Thentemp(0) = box(temp(0))temp(1) = box(temp(1))temp(2) = box(temp(2))temp(3) = box(temp(3))End If result(i) = result(i - 32) Xor temp(0)result(i + 1) = result(i - 31) Xor temp(1)result(i + 2) = result(i - 30) Xor temp(2)result(i + 3) = result(i - 29) Xor temp(3)Next expandKey = result
End Function
Function keyScheduleCore(ByRef row(), ByVal a, ByRef box(), ByRef rcon())Dim result(4), iFor i = 0 To 3result(i) = box(row((i + 5) Mod 4))Nextresult(0) = result(0) Xor rcon(a)keyScheduleCore = result
End Function 

翻译自: https://bytes.com/topic/access/insights/964786-vba-rnd-function-bad-what-use-instead

vba rnd

vba rnd_VBA Rnd()函数不正确,应使用什么代替相关推荐

  1. 关于VB调用Access的Rnd函数随机返回表中数据的解决方法

    论坛上问这个问题的人蛮多,最近正好也在写一个小东西遇上了这个问题,在网上搜索了下没找到解决办法.最后在Access版的老大们帮助下解决了,有兴趣的可以交流一下. SQL server数据库有个NewI ...

  2. 计算机不会输入函数怎么办,函数不正确_电脑上文件打不开,显示函数不正确怎么解决?...

    文件是谁给的,再问问去,自己编辑的话那看有备份不.电子表的函数错误,也不会打不开,就是会提示,不会计算出来结果 电脑显示函数不正确是怎么回事 运行中输入cmd,在命令提示符下输入: for%1in(% ...

  3. #define定义宏函数 的正确使用

    如何使用宏来定义一个自定义函数呢? 首先我们来看下面这段代码 #define SQUARE(x) x*x int main() {int a = 5;printf("SQUARE(a): % ...

  4. 移动硬盘函数不正确要如何寻回资料

    移动磁盘打不开函数不正确,是因为这个I盘的文件系统内部结构损坏导致的.要恢复里面的数据就必须要注意,这个盘不能格式化,否则数据会进一步损坏.具体的恢复方法看正文 工具/软件:AuroraDataRec ...

  5. CF卡插到时显示函数不正确请问咋才能修复?

    这是分区逻辑损坏后最常见的表现.CF卡插到时显示函数不正确请问咋才能修复?有些用人到这种情况后首先会尝试使用Windows系统自带的硬盘修复工具chk命令进行修复,不过,这样操作并不能解决问题,往往会 ...

  6. C语言函数如何正确的输入和返回数组(一维和二维)

    对于一维数组而言有两种方法: 1.函数外(主函数内)初始化数组,相当于已经分配好了一块固定的内存,然后将其地址传入函数,经过一番操作,再将地址返回. 2.函数内创建静态局部数组,操作后再返回.因为静态 ...

  7. 【数字图像处理】模拟Matlab的imresize()写一个你自己的imresize()函数,至少应实现‘nearest’和‘bilinear’两种方法

    作业要求:模拟Matlab的imresize()写一个你自己的imresize()函数,至少应实现'nearest'和'bilinear'两种方法. 首先理论方面主要参考了一下两个网址 https:/ ...

  8. 机械硬盘函数不正确要如何办啊

    磁盘打不开函数不正确,是因为这个I盘的文件系统内部结构损坏导致的.要恢复里面的数据就必须要注意,这个盘不能格式化,否则数据会进一步损坏.具体的恢复方法看正文 工具/软件:星空数据恢复软件 步骤1:先下 ...

  9. 硬盘函数不正确怎么解决

    硬盘函数不正确是因为这个盘的文件系统内部结构损坏,导致这个盘无法正常打开.要想恢复里面的数据一定要注意不要直接格式化.具体的恢复方法可以看下文了解 工具/软件:极光数据恢复软件 数据恢复方法: 数据恢 ...

最新文章

  1. 湘潭大学c语言答案,湘潭大学生c语言课后习题答案.doc
  2. 解决使用CoreData时报duplicate symbol错误问题
  3. CSS 选择器 :last-child与:last-of-type的区别
  4. Promise-js异步加载解决方案
  5. sunplus8202v BIN文件中LOGO的替换工具设计思路
  6. 一个人学的软件测试,到底有多难?
  7. 剑指offer面试题05. 替换空格
  8. android intent 跳转配置,android 再解Intent,通过配置Action和Data跳转
  9. 无机金属专业里有计算机课吗,无机非金属材料工程专业课程有不少
  10. iOS开发中的零碎知识点笔记 韩俊强的博客
  11. 尼康D780相机黑屏的故障原因
  12. Android FrameWork 系统源码调试
  13. seastar与go的http性能差异
  14. Kotlin 概述【官方】
  15. 计算机巨人的采访对话英文怎么说,采访明星的英文对话稿。
  16. m.soudashi.cn 地图_网站百度排名推广的基本操作是什么
  17. java 编程习题 之 猴子偷桃
  18. (四)【软件设计师】计算机系统—基础单位进制
  19. cad自定义菜单cui_CAD中如何制作自定义菜单
  20. 帝国没有php.ini,帝国cms上传文件大小的限制php.ini设置方法

热门文章

  1. Ubuntu9.04配置命令宝典
  2. 如何快速开发便捷小风扇?泛海微单片机方案开发公司经验十足
  3. IEC104协议学习遥测、遥信、电度
  4. WPS表格-快速展开全部隐藏行
  5. LWIP协议与TCP/IP
  6. 【工具】markdown
  7. 创建菜单栏、菜单、菜单项
  8. 学术写作笔记(3):引言
  9. oracle 序列迁移
  10. 私钥,公钥的区分——私钥公钥讲解