hashlib 将我的变量散列为 float 而不是 str

问题描述

在我的代码中,我想每次都将变量“liczba”作为 str 散列,但在我的代码中,它仅在第一次算作 str 。每个下一个循环它都被散列为浮点数。此外,变量“liczba”应该通过在每个循环中添加 0.0000000000000000000000000000000000000000000001 来改变。我尝试使用

liczba = str(obecna_liczba)

但它不工作idk为什么。有什么建议吗?

import hashlib

obecna_liczba = 0.0000000000000000000000000000000000000000000001
koncowa_liczba = 0.0000000000000000000000000000000000000000000010
liczba = '0.0000000000000000000000000000000000000000000001'


filepath = "X:\hashe.txt"

f = open(filepath,"w")

while(obecna_liczba < koncowa_liczba):
    hash = hashlib.sha256(str(liczba).encode('utf-8'))
    f.write(hash.hexdigest())
    f.write("\n")
    obecna_liczba += 0.0000000000000000000000000000000000000000000001
    print(type(obecna_liczba))
    liczba = str(obecna_liczba)
    print(type(liczba))

f.close()

解决方法

如果您真正需要的只是字符串 0.00000000000000000000000000000000000000000000010.0000000000000000000000000000000000000000000010 的 SHA-256 哈希,您可能希望跳过浮点运算而只生成字符串。

:046d 格式说明符指定十进制数字的零填充,宽度为 46 个字符,根据您的原始数字。

import hashlib

for x in range(1,11):
    number_string = f"0.{x:046d}"
    print(number_string,hashlib.sha256(number_string.encode('utf-8')).hexdigest())

输出是

0.0000000000000000000000000000000000000000000001 164f084fdd4bf692f0d0e8f4505132d7bdffae467377cf2512af321f5c0d9e4c
0.0000000000000000000000000000000000000000000002 20c3aeba98845b288eb7109b8153c938289c359b8929ee738cde7606960f4399
0.0000000000000000000000000000000000000000000003 71c0ec3a6a53562682b79f3e8b196637f33a7bed3fc376cf39b6bcd3d78a3e5b
0.0000000000000000000000000000000000000000000004 2d7e43b48eff27ed8023090160021dffe507ef7bdb8a9e3547e4cf9709df6c79
0.0000000000000000000000000000000000000000000005 63037238589c29e32e9468487314acce5d4a093fcfd85df9db5fecc5187fc3e9
0.0000000000000000000000000000000000000000000006 e3399f0597f6682b9ff4510b1bc520e4251ef3eda99ab10d25234909d2137744
0.0000000000000000000000000000000000000000000007 e168716f1ae7d8df34e0d1394b42b86fab91fb13f1e5b95a4094291980f6d884
0.0000000000000000000000000000000000000000000008 2c6379918c12a69aaeb9067be5878a423836e60d20064bcba5ffc3f96cb96ffa
0.0000000000000000000000000000000000000000000009 bd96da9bec4c5e4781240d09f7095da2e4c4fba0262bfc48ba635231b0407d4e
0.0000000000000000000000000000000000000000000010 4f3201ad75c685abb97b7873cca3092df892630b37bdc8c35bac98ce3ef6e4dc```