【问题标题】:MS Access VBA Substitution Cipher Encrypt/DecryptMS Access VBA 替换密码加密/解密
【发布时间】:2011-12-16 16:52:04
【问题描述】:

任何人都可以建议我如何实现替换密码样式; VBA中的加密和解密函数。我很欣赏散列被认为是更好的方法,但我需要可逆加密。非常感谢。

【问题讨论】:

  • 你不是已经有一个you tried to post了吗?
  • @Deanna 正如 Jean 所说,我之前确实发布过,但忽略了堆栈溢出的规则,我很抱歉地说,这种方式更好,因为人们正在提供答案,其他人可能会在未来通过谷歌搜索等

标签: ms-access encryption vba


【解决方案1】:

您可以使用Blowfish。有一个可以在 Access 中运行的 Visual Basic 6 版本,可在此处获得:

http://www.di-mgt.com.au/cryptoBlowfishVer6.html

你也可以试试TwoFish.

【讨论】:

    【解决方案2】:

    有一个简单的例子here 或者你可以使用更简单的ROT13 密码。

    这些对于隐藏一些文本很有用,但我不会将它们用于实际需要保持安全的任何事情。

    【讨论】:

      【解决方案3】:

      非常感谢针对我的问题提供的所有答案,很高兴看到有不同的方法,这是我昨天早上编写的一个。它允许对大写和小写字母使用不同的密码关键字/短语,我在此示例中使用了“Zebras”,它还使用 ROT13 密码运行第二遍。加密方式:

      Public Function Encrypt(strvalue As String) As String
      
      Const LowerAlpha    As String = "abcdefghijklmnopqrstuvwxyz"
      Const LowerSub      As String = "zebrascdfghijklmnopqtuvwxy" 'zebras
      Const UpperAlpha    As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      Const UpperSub      As String = "ZEBRASCDFGHIJKLMNOPQTUVWXY" 'ZEBRAS
      
      Dim lngi            As Long
      Dim lngE            As Long
      Dim strEncrypt      As String
      Dim strLetter       As String
      
      If strvalue & "" = "" Then Exit Function
      
      For lngi = 1 To Len(strvalue)
      
          strLetter = Mid(strvalue, lngi, 1)
      
          Select Case Asc(strLetter)
      
              Case 65 To 90 'Uppercase
                  'Find position in alpha string
                  For lngE = 1 To Len(UpperAlpha)
                      If Mid(UpperAlpha, lngE, 1) = strLetter Then GoTo USub
                  Next
      USub:
                  strEncrypt = strEncrypt & Mid(UpperSub, lngE, 1)
      
              Case 97 To 122 'Lowercase
                  'Find position in alpha string
                  For lngE = 1 To Len(LowerAlpha)
                      If Mid(LowerAlpha, lngE, 1) = strLetter Then GoTo LSub
                  Next
      LSub:
                  strEncrypt = strEncrypt & Mid(LowerSub, lngE, 1)
      
              Case Else 'Do not substitute
      
                  strEncrypt = strEncrypt & strLetter
      
          End Select
      
      Next
      
      'Now pass this string through ROT13 for another tier of security
      
      For lngi = 1 To Len(strEncrypt)
          Encrypt = Encrypt & Chr(Asc(Mid(strEncrypt, lngi, 1)) + 13)
      Next
      
      End Function
      

      这是随之而来的解密:

      Public Function Decrypt(strvalue As String) As String
      
      Const LowerAlpha    As String = "abcdefghijklmnopqrstuvwxyz"
      Const LowerSub      As String = "zebrascdfghijklmnopqtuvwxy" 'zebras
      Const UpperAlpha    As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      Const UpperSub      As String = "ZEBRASCDFGHIJKLMNOPQTUVWXY" 'ZEBRAS
      
      Dim lngi            As Long
      Dim lngE            As Long
      Dim strDecrypt      As String
      Dim strLetter       As String
      
      If strvalue & "" = "" Then Exit Function
      
      'Reverse the ROT13 cipher
      
      For lngi = 1 To Len(strvalue)
          strDecrypt = strDecrypt & Chr(Asc(Mid(strvalue, lngi, 1)) - 13)
      Next
      
      'Now reverse the encryption
      
      For lngi = 1 To Len(strDecrypt)
      
          strLetter = Mid(strDecrypt, lngi, 1)
      
          Select Case Asc(strLetter)
      
              Case 65 To 90 'Uppercase
                  'Find position in sub string
                  For lngE = 1 To Len(UpperSub)
                      If Mid(UpperSub, lngE, 1) = strLetter Then GoTo USub
                  Next
      USub:
                  Decrypt = Decrypt & Mid(UpperAlpha, lngE, 1)
      
              Case 97 To 122 'Lowercase
                  'Find position in sub string
                  For lngE = 1 To Len(LowerSub)
                      If Mid(LowerSub, lngE, 1) = strLetter Then GoTo LSub
                  Next
      LSub:
                  Decrypt = Decrypt & Mid(LowerAlpha, lngE, 1)
      
              Case Else 'Do not substitute
      
                  Decrypt = Decrypt & strLetter
      
          End Select
      
      Next
      
      End Function
      

      我希望对于那些没有丰富 VBA 编码经验的人来说,编码非常简单,并且可以直接从页面中提取;但再次感谢所有其他答案。

      【讨论】:

      • 这是一个非常弱的(借口)加密近乎荒谬。尝试一些更强大的东西,比如可以用更少的代码行来实现的 RC4。见这里:*.com/questions/7025644/…
      • 我很欣赏 Sub Ciphers 现在已经很老了,并不被认为是最好的,但我只需要一些简单的东西来处理这种情况,但你必须承认,这个加密的字符串看起来很酷 "S€4-XY^ -x‚~-zRrur€r|-€pz€-px„-„px-„|-~|zVV†-z~|9-r€-r-=‚~-p=>|”如果有人有时间,那么请给它一个爆炸,我想看看它实际上是多么容易。 :)