gpt4 book ai didi

java - Python 和 Java MAC SHA256 编码生成非常相似的 key

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:54 26 4
gpt4 key购买 nike

我正在使用 Java 创建签名请求(SHA256base64)并在 Python 中验证此请求>。我生成的 key 非常相似:

Java:

UjuGTll3GF7H8MHWyJc41NAEcd-OZOeJLT9PiAevcsw

python :

UjuGTll3GF7H8MHWyJc41NAEcd+OZOeJLT9PiAevcsw

唯一的区别发生在 char + 和 char - 上。我无法更改 Java 代码,因为我无权访问它,我只知道它使用 javax.crypto.Mac。但是,我的 python 代码是:

import hmac
import hashlib
hmac.new(api_secret, url, hashlib.sha256).digest().encode('base64')

变量 api_secreturl 在两种语言(JavaPython)中具有相同的输入

我错过了什么?

最佳答案

digest() 返回一个字符串,所以 encode 就是 standard encode method .根据列表standard encodings ,指定 base64 作为编码意味着 base64.encodestring将会被使用。该函数使用的字母表包括+/,它们是标准Base64字母表中的最后两个字符:

>>> base64.encodestring(chr(248))
'+A==\n'

如果你想要一个使用 -_ 而不是 +/ 的编码字符串,你需要使用 base64.urlsafe_b64encode :

>>> base64.urlsafe_b64encode(chr(248))
'-A=='

所以你需要做类似的事情:

base64.urlsafe_b64encode(hmac.new(api_secret, url, hashlib.sha256).digest())

不过,要使其正常工作,您需要检查 Java 代码是否也在生成 _ 而不是 /,例如 urlsafe_b64encode

关于java - Python 和 Java MAC SHA256 编码生成非常相似的 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38253904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com