Excel AES加密

Excel的开发,方式多种多样,常见的有 开发Excel的加载项,Excel的外接程序,宏。各有各的特点,前两者开发难度低,不过不同Excel版本间的兼容性差,使用宏开发,难度比较大,用的都是古老的vb,不过兼容性还是很好的。

这里,使用了宏进行开发,同时还用到了C#。原理是这样的,使用宏,发送http请求到C#开发的本地http服务器,处理完毕后将结果返回。

演示的示例是,将第一列的明文,用第二列的密码加密,加密后保存在第三列。http url编码使用utf-8编码,返回Base64的加密结果

Public Function UrlEncode(ByRef szString As String) As String
      Dim szChar   As String
      Dim szTemp   As String
      Dim szCode   As String
      Dim szHex    As String
      Dim szBin    As String
      Dim iCount1  As Integer
      Dim iCount2  As Integer
      Dim iStrLen1 As Integer
      Dim iStrLen2 As Integer
      Dim lResult  As Long
      Dim lAscVal  As Long
      szString = Trim$(szString)
      iStrLen1 = Len(szString)
      For iCount1 = 1 To iStrLen1
      szChar = Mid$(szString, iCount1, 1)
      lAscVal = AscW(szChar)
      If lAscVal >= &H0 And lAscVal <= &HFF Then
      If (lAscVal >= &H30 And lAscVal <= &H39) Or _
      (lAscVal >= &H41 And lAscVal <= &H5A) Or _
      (lAscVal >= &H61 And lAscVal <= &H7A) Then
      szCode = szCode & szChar
      Else
      szCode = szCode & "%" & Hex(AscW(szChar))
      End If
      Else
      szHex = Hex(AscW(szChar))
      iStrLen2 = Len(szHex)
      For iCount2 = 1 To iStrLen2
      szChar = Mid$(szHex, iCount2, 1)
      Select Case szChar
      Case Is = "0"
      szBin = szBin & "0000"
      Case Is = "1"
      szBin = szBin & "0001"
      Case Is = "2"
      szBin = szBin & "0010"
      Case Is = "3"
      szBin = szBin & "0011"
      Case Is = "4"
      szBin = szBin & "0100"
      Case Is = "5"
      szBin = szBin & "0101"
      Case Is = "6"
      szBin = szBin & "0110"
      Case Is = "7"
      szBin = szBin & "0111"
      Case Is = "8"
      szBin = szBin & "1000"
      Case Is = "9"
      szBin = szBin & "1001"
      Case Is = "A"
      szBin = szBin & "1010"
      Case Is = "B"
      szBin = szBin & "1011"
      Case Is = "C"
      szBin = szBin & "1100"
      Case Is = "D"
      szBin = szBin & "1101"
      Case Is = "E"
      szBin = szBin & "1110"
      Case Is = "F"
      szBin = szBin & "1111"
      Case Else
      End Select
      Next iCount2
      szTemp = "1110" & Left$(szBin, 4) & "10" & Mid$(szBin, 5, 6) & "10" & Right$(szBin, 6)
      For iCount2 = 1 To 24
      If Mid$(szTemp, iCount2, 1) = "1" Then
      lResult = lResult + 1 * 2 ^ (24 - iCount2)
      Else: lResult = lResult + 0 * 2 ^ (24 - iCount2)
      End If
      Next iCount2
      szTemp = Hex(lResult)
      szCode = szCode & "%" & Left$(szTemp, 2) & "%" & Mid$(szTemp, 3, 2) & "%" & Right$(szTemp, 2)
      End If
      szBin = vbNullString
      lResult = 0
      Next iCount1
      UrlEncode = szCode
      End Function

Public Function http(msg As String, password As String) As String
    Dim Url As String
    Url = "http://127.0.0.1:8080/AES?msg=" & UrlEncode(msg) & "&password=" & UrlEncode(password)
 
    Dim objHttp As Object
    Set objHttp = CreateObject("msxml2.xmlhttp")
 
    objHttp.Open "GET", Url, 0
    objHttp.send
     
    While objHttp.readystate <> 4
        DoEvents
    Wend
    http = objHttp.responsetext
End Function



Sub AES加密()
Dim i As Integer
i = 1
Do While Not IsEmpty(Cells(i, 1))

    If Not IsEmpty(Cells(i, 2)) Then
 
         Cells(i, 3) = http(Cells(i, 1), Cells(i, 2))
    
    End If
     i = i + 1
 Loop
End Sub

加密后,结果如上表格所示,这里的加密方式,是参照CryptoJS进行的,之所以选择这种方式,在于AES在线加密解密,均采用此标准,需要解密的时候,可以快速得找到解密的工具,例如:http://tool.oschina.net/encrypt。CryptoJS怎样加解密的,可以查看本博客的其他文章。

利用http请求,再加上简单的宏,就可以处理很多的复杂事情。比如生成二维码,各种各样的加密解密,同时又保证与Excel各版本的兼容性,甚至可以在xp和excel2003上使用。

代码:https://download.csdn.net/download/liangjintang/10364499

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值