SHA512 在 vba 中不适用于扩展字符集

Posted

技术标签:

【中文标题】SHA512 在 vba 中不适用于扩展字符集【英文标题】:SHA512 not working in vba for extended character set 【发布时间】:2020-01-04 04:54:23 【问题描述】:

如果输入字符串包含任何字符 > chr(127),则使用 .net 库在 vba 中使用 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;
?>

【问题讨论】:

不正确的散列如何表现出来?你能展示一个比较输出的例子吗? 使用下面的字符串 “abc” &CHR(148)& “DEFG” 给出以下:PHP = 6c64101ac7f794e1af3b890630ecb052cf92cdb2d3abf5f8d134517ae1e0a59a9b71da247082e3139a5addbfc1380bb27aafe7d64632ec699795be13d34a7726 VBA = 9490f88b45e5195004fb6d458eb999d0dec1423138c2d5d0eeb515de0be8a06077ec6ba2f09140a152ff9a740d1b12bb837ca10566078ac5585ce28e632dcf9f使用字符串 “ABCDEFG” 都得到相同的答案跨度> 在使用emn178.github.io/online-tools/sha512.html进行测试时,我得到了另一个值 如果我使用在线 php 哈希,php 和 js 的值相同,但与您发布的值不同。我错过了什么?如果我自己运行你的 php,我会得到你提到的值,那么这是否证明了你的观点或所使用的算法?我原以为你的脚本和 php 链接会给出相同的结果。 感谢 QHarr。我将字符串粘贴到该 html 和 php(上图)中,并且都得到了与 vba(上图)相同的答案。所以我得出结论,当字符串通过 SOAP 以 xml 格式发送到比较哈希值的网络服务器时,发生了一些事情。 【参考方案1】:

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

【讨论】:

以上是关于SHA512 在 vba 中不适用于扩展字符集的主要内容,如果未能解决你的问题,请参考以下文章

如何在Swift中将字符串哈希到SHA512?

带有图像的可扩展字符串不适用于推送通知

使用 SHA512 的哈希字符串的长度是多少?

如何在 Java 中使用 SHA-512 对密码进行哈希处理?

设置一个可扩展的字符串不适用于简单的 Textview

python基础整理笔记