0

我认为制作我自己的(可怕的)sha256 函数将是一个有趣的项目。我以最糟糕的方式做到了这一点——只使用包含'1'和'0'作为字符的字符串。

无论如何,我得到了它的工作,它可以散列“你好,世界”到预期值9ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b9ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b

所以接下来我尝试散列一个文件。testing.txt,包含单词'testing',也匹配windows powershell Get-FileHash testing.txt

然后我大胆地录制了一个 mp3 并尝试对其进行哈希处理,结果不一样了!

我尝试了什么:

  • 将 testing.txt 的文件名更改为 testing.mp3,从而产生匹配的哈希值
  • 散列各种不同的文件。它似乎在所有非文本文件上都失败了。

我读取文件的代码:

def file_to_binstr(filename):
    with open(filename,'rb') as f:
        contents = f.read()
    
    binstr = ''
    for char in contents: # contents is bytestring
        char = bin(char)[2:] # string of binary representation of each byte
        char = zero_pad(char, 8) # makes sure byte is 8 characters long
        binstr += char

    return binstr

我怀疑 open(filename, 'rb') 不会让我读取文件的所有字节,而只是读取与文件内容相关的字节,而 windows 的 Get-FileHash 确实会散列文件的所有位。如果是这种情况,我将如何读取文件的完整二进制数据?

4

0 回答 0