从pycrypto和hashlib构建HMACSHA512

2024-09-28 18:51:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从旧版本的pycrypto和{}构造{}。结果与RFC4231中的测试向量不同

目前我的代码:

from hashlib import sha512  # my pycrypto doesn't have SHA
from Crypto.Hash import HMAC
from binascii import a2b_hex

# helper to match HMAC signature
class Sha512:
    @staticmethod
    def new():
        return sha512()

def hmac(hexkey, hexdata):
    return HMAC.new(a2b_hex(hexkey), a2b_hex(hexdata), digestmod=Sha512).hexdigest()

hmac("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", "4869205468657265")
'9656975ee5de55e75f2976ecce9a04501060b9dc22a6eda2eaef638966280182477fe09f080b2bf564649cad42af8607a2bd8d02979df3a980f15e2326a0a22a'

# should be
'87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854'

我是不是出了问题? 在pycrypto中,key会有不同的语义吗?在

编辑:我在Python3和最新的pycrypto中也看到了同样的差异。在


Tags: fromimportnewreturndefhmachexpycrypto
1条回答
网友
1楼 · 发布于 2024-09-28 18:51:08

结果是,pycrypto希望在实例化算法之前查看算法的块和摘要大小。在

以下是一个有效的方法:

class Test:
    @staticmethod
    def new():
        return sha512()
    block_size = sha512().block_size
    digest_size = sha512().digest_size

此外,旧版本的pycrypto不支持更大的块大小: https://bugs.launchpad.net/pycrypto/+bug/754806

而且,pycrypto对于这个特定的任务来说并不是真正必要的。Python提供了一个hmac模块,它可以接受hashlib哈希。在

相关问题 更多 >