SHA512在扩展字符集的vba中不工作

SHA512在扩展字符集的vba中不工作,vba,sha512,Vba,Sha512,如果输入字符串包含任何字符>chr(127),则在vba中使用.net库对SHA512进行哈希运算是不正确的。正在将输出与PHP SHA512进行比较。有什么想法吗 我尝试了不同的文本编码 Public Function SHA512(sIn As String) As String Dim oT As Object, oSHA512 As Object Dim TextToHash() As Byte, bytes() As Byte Set oT = Create

如果输入字符串包含任何字符>chr(127),则在vba中使用.net库对SHA512进行哈希运算是不正确的。正在将输出与PHP SHA512进行比较。有什么想法吗

我尝试了不同的文本编码

Public Function SHA512(sIn As String) As String

    Dim oT As Object, oSHA512 As Object
    Dim TextToHash() As Byte, bytes() As Byte

    Set oT = CreateObject("System.Text.UTF8Encoding")
    Set oSHA512 = CreateObject("System.Security.Cryptography.SHA512Managed")

    TextToHash = oT.GetBytes_4(sIn)
    bytes = oSHA512.ComputeHash_2((TextToHash))

    SHA512 = ConvToHexString(bytes)

    Set oT = Nothing
    Set oSHA512 = Nothing

End Function
Private Function ConvToHexString(vIn As Variant) As Variant

On Error Resume Next

    Dim oD As Object
    Set oD = CreateObject("MSXML2.DOMDocument.6.0")
      With oD
        .loadXML "<root />"
        .documentElement.DataType = "bin.Hex"
        .documentElement.nodeTypedValue = vIn
      End With
    ConvToHexString = Replace(oD.documentElement.Text, vbLf, "")

    Set oD = Nothing

End Function
Private Sub Command0_Click()
    Dim strg As String
    strg = "abc" & Chr(148) & "defg"
    MsgBox SHA512(strg)
    MsgBox strg

End Sub

<?php
    $strg = "abc".chr(148)."defg";
   echo hash('sha512', $strg);
    echo "</br>".$strg;
?>
公共函数SHA512(sIn作为字符串)作为字符串
尺寸oT作为对象,oSHA512作为对象
Dim TextToHash()作为字节,bytes()作为字节
Set oT=CreateObject(“System.Text.UTF8Encoding”)
设置oSHA512=CreateObject(“System.Security.Cryptography.SHA512Managed”)
TextToHash=oT.GetBytes_4(sIn)
bytes=oSHA512.ComputeHash_2((TextToHash))
SHA512=ConvToHexString(字节)
设置oT=无
设置oSHA512=无
端函数
专用函数ConvToHexString(vIn作为变量)作为变量
出错时继续下一步
将oD作为对象
设置oD=CreateObject(“MSXML2.DOMDocument.6.0”)
有oD
.loadXML“”
.documentElement.DataType=“bin.Hex”
.documentElement.nodeTypedValue=vIn
以
ConvToHexString=Replace(oD.documentElement.Text,vbLf,“”)
设置oD=无
端函数
专用子命令0_单击()
作为字符串的Dim strg
strg=“abc”和Chr(148)和“defg”
MsgBox SHA512(strg)
MsgBox strg
端接头

我得出结论,SHA512例程产生相同的结果。问题在于如何在vba和PHP之间发送数据。

不正确的哈希是如何表现的?您是否可以使用以下字符串“abc”&chr(148)和“defg”显示一个输出比较的工作示例给出以下内容:php=6C64101AC7F794E1AF3B890630ECB052CF92CDB2D3ABF5F8D134517AE1E0A59A9B71DA247082E3139A5ADBFC1380BB27AAFE7D64632EC699795BE13D34A7726 vba=9490F88B45E5195004FB6D45EB999D0DE8A06077EC6BF09140A152FF9AD14B12BB837CA10578AC85CE28E632BF9F使用字符串“ABEFG”两者都得到了相同的答案我在测试时得到了另一个值,如果我使用在线php哈希,我得到的结果与js相同,但与您发布的值不同。我错过了什么?如果我自己运行你的php,我会得到你提到的值,那么这是在证明你的观点还是关于所用算法的什么?我原以为你的脚本和php链接会给出相同的结果。谢谢QHarr。我将字符串粘贴到html和php(上图)中,得到了与vba(上图)相同的答案。因此,我得出结论,当字符串通过SOAP以xml形式发送到比较哈希的Web服务器时,会发生一些事情。