Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SHA256哈希计算_Python_Python 3.x_Hash_Sha256_Sha - Fatal编程技术网

Python SHA256哈希计算

Python SHA256哈希计算,python,python-3.x,hash,sha256,sha,Python,Python 3.x,Hash,Sha256,Sha,我正在用Python编写一个SHA256实现,填充、解析和消息调度似乎都很好,我的问题在于哈希计算。目前,我正在尝试计算工作变量“a”。 这是我得到的十六进制值 5d6aebe0 预期产出,根据: 5D6AEBCD 这是我的密码: 将工作变量设置为中指定的常量 a=int'6a09e667',16 b=国际bb67ae85',16 c=int'3c6ef372',16 d=国际a54ff53a',16 e=int'510e527f',16 f=int'9b05688c',16 g=int'1f8

我正在用Python编写一个SHA256实现,填充、解析和消息调度似乎都很好,我的问题在于哈希计算。目前,我正在尝试计算工作变量“a”。 这是我得到的十六进制值

5d6aebe0

预期产出,根据:

5D6AEBCD

这是我的密码:

将工作变量设置为中指定的常量

a=int'6a09e667',16 b=国际bb67ae85',16 c=int'3c6ef372',16 d=国际a54ff53a',16 e=int'510e527f',16 f=int'9b05688c',16 g=int'1f83d9ab',16 h=int'5be0cd19',16 设置取决于t值的两个重要变量:

W=int'61626380',16 K=int'428a2f98',16 从上的伪代码:

ROTR功能:

@静力学方法 def ROTRx,n,w=32:
return x>>n | x>n | x您需要在此处添加更多掩蔽以减少溢出位。例如,您的ROTR:

在您可能溢出假定寄存器宽度的任何时候,都需要类似的掩码。它们还可以取代%math.pow2,32的易出错用法,您正在进行更改:

int((temp1 + temp2) % math.pow(2, 32))
致:


对于溢出不明显的位求反,也需要这样做:Python的int是无限精度的,非负值的位求反产生负值,有效地在语言指定的伪2补码行为的左侧添加无限1位。所以~x必须变成~x&1您需要在这里添加更多掩蔽以减少溢出位。例如,您的ROTR:

在您可能溢出假定寄存器宽度的任何时候,都需要类似的掩码。它们还可以取代%math.pow2,32的易出错用法,您正在进行更改:

int((temp1 + temp2) % math.pow(2, 32))
致:


对于溢出不明显的位求反,也需要这样做:Python的int是无限精度的,非负值的位求反产生负值,有效地在语言指定的伪2补码行为的左侧添加无限1位。所以~x必须变成~x&1~不是32位的~。这是我遇到的第一个问题。另外,您正在重用a变量。@user2357112我通过手动反转位对其进行了测试,得到了相同的结果。重用a是正确的。~不是32位~。这是我遇到的第一个问题。另外,您正在重用a变量。@user2357112我通过手动反转位对其进行了测试,得到了相同的结果。重复使用a是正确的。
def ROTR(x, n, w=32):
    return ((x >> n) | (x << w - n)) & ((1 << w) - 1)
int((temp1 + temp2) % math.pow(2, 32))
(temp1 + temp2) & ((1 << 32) - 1)
(temp1 + temp2) % 2 ** 32