python和j之间HMAC签名的区别

2024-04-24 09:57:17 发布

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

我正在尝试获取一些可工作的python代码,并将其转换为java供我使用。下面的python代码生成正确的签名。使用相同键salt的java代码会产生不同的结果,我不知道为什么。在Java代码中,我使用python中生成的密钥(key)来创建签名。在

我不明白的是,如果我在python中打印_key的值,就会得到“34ee7983-5ee6-4147-aa86-443ea062abf774493d6a-2a15-43fe-aace-e78566927585”。现在,如果我把它直接放入hmac(new)调用中,得到的结果与只保留_key变量不同。我想这和某种类型的编码有关,但我不知所措。在

_s1 = base64.b64decode('VzeC4H4h+T2f0VI180nVX8x+Mb5HiTtGnKgH52Otj8ZCGDz9jRW'
                       'yHb6QXK0JskSiOgzQfwTY5xgLLSdUSreaLVMsVVWfxfa8Rw==')
_s2 = base64.b64decode('ZAPnhUkYwQ6y5DdQxWThbvhJHN8msQ1rqJw0ggKdufQjelrKuiG'
                       'GJI30aswkgCWTDyHkTGK9ynlqTkJ5L4CiGGUabGeo8M6JTQ==')

# bitwise and of _s1 and _s2 ascii, converted to string
_key = ''.join([chr(ord(c1) ^ ord(c2)) for (c1, c2) in zip(_s1, _s2)])

@classmethod
def get_signature(cls, song_id, salt=None):
    """Return a (sig, salt) pair for url signing."""

    if salt is None:
        salt = str(int(time.time() * 1000))

    mac = hmac.new(cls._key, song_id, sha1)
    mac.update(salt)
    sig = base64.urlsafe_b64encode(mac.digest())[:-1]

    return sig, salt

这是我的Java代码。我认为最终我的问题是如何处理或编码AA_密钥,但我无法解决。在

^{pr2}$

我发现了几个类似的问题,但他们并没有帮助我解决它的悲哀。谢谢!在

Python HMAC-SHA256 signature differs from PHP signature

Python HMAC-SHA1 vs Java HMAC-SHA1 different results


Tags: key代码newmac密钥javahmacsalt