SHA512在扩展字符集的vba中不工作
如果输入字符串包含任何字符>chr(127),则在vba中使用.net库对SHA512进行哈希运算是不正确的。正在将输出与PHP SHA512进行比较。有什么想法吗 我尝试了不同的文本编码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
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服务器时,会发生一些事情。