Vb.net 在Access VBA中创建SHA1哈希和xml规范化
我是编程和使用Access 2010 VBA的新手。我需要对xml文件应用一组规则,以便访问API。我曾尝试过不同的方法,但由于我的知识有限,每种方法都被卡住了。如果有人能为我指出正确的道路/提供一些建议,那就太好了 规则:Vb.net 在Access VBA中创建SHA1哈希和xml规范化,vb.net,vba,ms-access,Vb.net,Vba,Ms Access,我是编程和使用Access 2010 VBA的新手。我需要对xml文件应用一组规则,以便访问API。我曾尝试过不同的方法,但由于我的知识有限,每种方法都被卡住了。如果有人能为我指出正确的道路/提供一些建议,那就太好了 规则: 将xml文件规范化为W3C C14N规范 SHA1将xml散列为二进制,以便进一步编码 Base64和Base32对SHA1哈希进行编码 我的第一个问题是,我找不到任何方法在VBA中对xml进行c14n。因此,我跳过了这一步,因为我可以确保xml是预先规范化的。虽然理想情况
Public Function SHA1Base64(ByVal sTextToHash As String)
Dim asc As Object, enc As Object
Dim TextToHash() As Byte
Set asc = CreateObject("System.Text.UTF8Encoding")
Set enc = CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider")
TextToHash = asc.Getbytes_4(sTextToHash)
Dim bytes() As Byte
bytes = enc.ComputeHash_2((TextToHash))
SHA1Base64 = EncodeBase64(bytes)
Set asc = Nothing
Set enc = Nothing
End Function
Private Function EncodeBase64(ByRef arrData() As Byte) As String
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument
' byte array to base64
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.Text
Set objNode = Nothing
Set objXML = Nothing
End Function
请注意,并不是几乎所有的.NET Framework库都可以在VBA中使用(无论如何都不需要将它们包装在COM可调用包装器dll中)。恰好可以直接从VBA调用所需的函数。是的,确实,我所知道的关于这一点的文档并不多,而且它不是直观的。GetBytes_4和ComputerHash_2实际上是.NET中的“重载”函数,这在VBA中是不存在的。基本上就是多次声明同一个函数,但每次都使用不同数量和/或不同类型的参数
您可能希望将这些函数的输出与其他地方的已知良好输出进行比较。我这么说只是因为我知道这段代码返回了一些东西,但我不知道这是否就是你要找的