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 中不适用于扩展字符集的主要内容,如果未能解决你的问题,请参考以下文章