将 SHA 256 移植到 Excel.一个问题:参数为二进制,而不是ASCII



我正在写一个关于这段代码的问题: 将 SHA-256 库移植到 Excel

如果我在Excel中使用上述函数,我不是在对二进制数据进行SHA,而是在数据的ASCII表示中。由于我想"在Excel中挖掘比特币"(当然只是一个教学实验(,我需要将二进制字符串传递给此函数,正确的0和1位序列,而不是1(4位(的ascii表示。

我可以在 excel 单元格中执行此操作,也可以是 VBA 代码,这对我来说无关紧要。

在这里,我使用的excel:

https://drive.google.com/file/d/1Qdy_PpUj4ZWLGBXCsSSBmQgTMhQITLVz

我在 excel 工作表中使用的 SHA256 函数是将二进制文件散列为文本,而不是使用其中的位。这导致此 excel 函数的输出与所需的输出不同。下面是一个python中的简单示例来说明它。

import hashlib
string1 = '876dd0a3ef4a2816ffd1c12ab649825a958b0ff3bb3d6f3e1250f13ddbf0148cc40297f730dd7b5a99567eb8d27b78758f607507c52292d02d4031895b52f2ff'
string2 = '10000111011011011101000010100011111011110100101000101000000101101111111111010001110000010010101010110110010010011000001001011010100101011000101100001111111100111011101100111101011011110011111000010010010100001111000100111101110110111111000000010100100011001100010000000010100101111111011100110000110111010111101101011010100110010101011001111110101110001101001001111011011110000111010110001111011000000111010100000111110001010010001010010010110100000010110101000000001100011000100101011011010100101111001011111111'
hashlib.sha256(bytes.fromhex(string1)).hexdigest()
>>> 'cd93fc352d3b9f27392b3052c61190609fdc80194ade62771ce9588808980be9'
hashlib.sha256(string2.encode('utf-8')).hexdigest()
>>> 'c9aee68969373b4aecc87382fb2aa28276c6b9a9bfb6956615b4b29eb14d51d2'

第一个输出是您应该从第一轮哈希中获得的实际输出。第二个输出是我从 excel 函数获得的输出。这是因为此函数对该二进制文件进行哈希处理的方式与对字符串(如"hello world"(进行哈希处理的方式相同。

因此,在进行sha轮之前,我需要将此excel函数中的输入值从文本转换为二进制数据。

链接到我在Stackexchange上的问题:https://bitcoin.stackexchange.com/questions/90259/merkle-root-for-block-100000-calculation-in-excel

谢谢

对函数参数的各种 CHAR((/CODE(( 操作,但我失败了。

有关提供的 StackOverflow 示例的其他详细信息。

有点晚了(问题后 4 个月(,但如果你还在研究这个问题:请在此处查看我的代码:https://github.com/krijnsent/crypto_vba ->它正在使用 system.security.cryptography 函数来完成 SHA256

。如果你下载了Excel文件(你只需要ModHash和正确的引用(,这段代码会给你正确的结果:

Sub teststrings()
string1 = "876dd0a3ef4a2816ffd1c12ab649825a958b0ff3bb3d6f3e1250f13ddbf0148cc40297f730dd7b5a99567eb8d27b78758f607507c52292d02d4031895b52f2ff"
string2 = "10000111011011011101000010100011111011110100101000101000000101101111111111010001110000010010101010110110010010011000001001011010100101011000101100001111111100111011101100111101011011110011111000010010010100001111000100111101110110111111000000010100100011001100010000000010100101111111011100110000110111010111101101011010100110010101011001111110101110001101001001111011011110000111010110001111011000000111010100000111110001010010001010010010110100000010110101000000001100011000100101011011010100101111001011111111"
'Convert string1 to bytes
nBytes = Len(string1)  2
Dim a() As Byte
ReDim a(nBytes - 1)
For i = 0 To nBytes - 1
a(i) = CDec("&H" & Mid(string1, 1 + i * 2, 2))
Next
Set SHAhasher = CreateObject("System.Security.Cryptography.SHA256Managed")
bytes = SHAhasher.ComputeHash_2(a)
TestResult = ConvToHexString(bytes)
Debug.Print TestResult
'cd93fc352d3b9f27392b3052c61190609fdc80194ade62771ce9588808980be9
TestResult = ComputeHash_C("SHA256", string2, "", "STRHEX")
Debug.Print TestResult
'c9aee68969373b4aecc87382fb2aa28276c6b9a9bfb6956615b4b29eb14d51d2
End Sub

希望有帮助

相关内容

  • 没有找到相关文章