Python SHA256哈希计算
我正在用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: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
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