许多在线赌博游戏使用将哈希转换为0-(通常为2 ^ 52)的十进制数的函数。
这里是一些我找到的代码,它可以正常工作,但我不明白它为什么能工作:
我不明白的代码部分是从h到c的转换。 h是十六进制摘要,因此它是基于16的。Python文档说int(a,b)函数将字符串a转换为基于b的整数。我的问题是:
这里是一些我找到的代码,它可以正常工作,但我不明白它为什么能工作:
def get_result(hash):
hm = hmac.new(str.encode(hash),b'', hashlib.sha256) #hashing object
h = hm.hexdigest() #hex digest, 32 bytes 256 bit
print(h) #Something like 848ab848c6486d4f64
c = int(h,16)
print(c) #numbers only, 77 numbers long...?
if (c % 33 == 0):
return 1
h = int(h[:13],16)
return (((100 * E - h) / (E - h)) // 1) / 100.0
我不明白的代码部分是从h到c的转换。 h是十六进制摘要,因此它是基于16的。Python文档说int(a,b)函数将字符串a转换为基于b的整数。我的问题是:
- 一个整数怎么能是基于16的? 十进制不是定义为10个数字(0-9)吗?这额外的6从哪里来?
- 据我所知,一个单独的十六进制数字可以由4位或1/2字节存储。 因此,长度为64的十六进制字符串将占用32个字节。 这是否意味着任何此数据的基础也将是32个字节? (将十六进制字符串转换为基于n的字符串,其中n是任何值)
- c变量始终是77位长的含义是什么?
int
函数将一个表示为字符串的n进制整数转换为Python整数。当你打印这个转换后的整数时,你会得到一个与平常一样的十进制输出。所以10 == int("a", 16)
。 - flakes