将SHA256移植到Excel。一个问题:参数是二进制的,而不是ASCII

将SHA256移植到Excel。一个问题:参数是二进制的,而不是ASCII,excel,sha256,Excel,Sha256,我正在写一个关于此代码的问题: 如果我在Excel中使用上述函数,我不是在二进制数据上执行SHA,而是在数据的ASCII表示中执行SHA。因为我想“在Excel中挖掘比特币”(当然,这只是一个说教性的实验),所以我需要将一个二进制字符串传递给这个函数,即0和1位的正确序列,而不是1(4位)的ascii表示 我可以在excel单元格中这样做,也可以是VBA代码,这对我来说并不重要 这里是我使用的excel: 我在excel工作表中使用的SHA256函数是将二进制文件散列为文本,而不是使用其中的

我正在写一个关于此代码的问题:

如果我在Excel中使用上述函数,我不是在二进制数据上执行SHA,而是在数据的ASCII表示中执行SHA。因为我想“在Excel中挖掘比特币”(当然,这只是一个说教性的实验),所以我需要将一个二进制字符串传递给这个函数,即0和1位的正确序列,而不是1(4位)的ascii表示

我可以在excel单元格中这样做,也可以是VBA代码,这对我来说并不重要

这里是我使用的excel:

我在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上的问题:

谢谢

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

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

有点晚了(问题后4个月),但如果您仍在处理此问题:请在此处查看我的代码:->它使用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

希望这能有所帮助

当我说我失败时,我是说我在谷歌上搜索了一些在电子表格上返回值的东西。我担心代码可能会产生最小的积极影响。为清晰起见,编辑了问题。