【问题标题】:AES Encrypting a Microsoft Access Field Via VBAAES 通过 VBA 加密 Microsoft 访问字段
【发布时间】:2026-01-20 17:45:01
【问题描述】:

我需要创建一个 Microsoft Access 数据库,但需要在我的一个表中对单个字段进行强加密。

由于 AES 需要密钥和初始化向量,我决定通过需要密码来访问数据库(作为密钥)和表中的字段来保存明文的 SHA1 哈希来解决这个问题加密字段。

有人知道我在哪里可以找到与 VBA 兼容的代码来实际进行加密吗?

【问题讨论】:

    标签: vba ms-access aes


    【解决方案1】:

    从头开始编写的一些替代方法;

    • 您可以使用本机 CryptoAPI(根 API 为 CryptAquireContext)来实现
    • 您可以使用 Microsoft 的 CAPICOM,它是 CryptoAPI 和 supports AES 的 COM 包装器。
    • 您可以使用第 3 方库,ebCrypt 提供的库非常出色、紧凑且免费。

    【讨论】:

      【解决方案2】:

      以下是使用 RC4 加密的示例。

      来源: http://bytes.com/topic/access/insights/906671-rc4-encryption-algorithm-vba-vbscript

      Function fRunRC4(sMessage, strKey) As String
          Dim kLen, x, y, i, j, temp
          Dim s(256), k(256)
      
          'Init keystream
          kLen = Len(strKey)
          For i = 0 To 255
              s(i) = i
              k(i) = Asc(Mid(strKey, (i Mod kLen) + 1, 1))
          Next
      
          j = 0
          For i = 0 To 255
              j = (j + k(i) + s(i)) Mod 255
              temp = s(i)
              s(i) = s(j)
              s(j) = temp
          Next
      
          'Drop n bytes from keystream
          x = 0
          y = 0
          For i = 1 To 3072
              x = (x + 1) Mod 255
              y = (y + s(x)) Mod 255
              temp = s(x)
              s(x) = s(y)
              s(y) = temp
          Next
      
          'Encode/Decode
          For i = 1 To Len(sMessage)
              x = (x + 1) Mod 255
              y = (y + s(x)) Mod 255
              temp = s(x)
              s(x) = s(y)
              s(y) = temp
      
              fRunRC4 = fRunRC4 & Chr(s((s(x) + s(y)) Mod 255) Xor Asc(Mid(sMessage, i, 1)))
          Next
      
      
      End Function
      

      【讨论】:

      • 在提到的链接中还有一个 VBA 版本的 AES
      • 代码在2015年更新,在这个帖子发布之后。有一个错误。
      【解决方案3】:

      您可以使用 SlowAES(一种 AES 的 Javascript 实现,包装为 COM 对象)来实现。

      在这个其他答案中的更多信息。
      How to encrypt in VBScript using AES?

      工作源代码在这里:
      http://cheeso.members.winisp.net/srcview.aspx?dir=AES-example

      【讨论】:

        【解决方案4】:

        MS 知识库提供VB code for using the CryptoAPI。请注意,该示例说明了如何加密而不是如何解密结果。但这很容易做到,因为解密 API 声明具有几乎相同的参数。但是请注意,示例代码中的字符串到字节的转换例程会在解密过程中错误地去除尾随空格,因此您必须更改该代码来修复它。

        【讨论】:

        • 这适用于 Vb.Net。 MS Access 使用 VBA,它是 VB6(即不是 .Net)的衍生产品