Jwt 无法获得rfc7515第3.3节中的相同签名
在中,有一个jws示例: BASE64URL(UTF8(JWS保护头))=eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 BASE64URL(JWS有效载荷)=EYJPC3MIOIJQB2UILA0KIJLEHAIOJEZMDA4MTKZODASDQOGIMH0Dha6ly9LegftCGXLLMNVBS9PC19YB290IJP0CNVLFQ 其密钥是jwk: {“kty”:“oct”, “k”:“AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr\u T-1QS0GZH75AKTMN3YJ0IPS4HCGUTWJAZR1Z9CAOW” } 然后我们需要使用HMAC SHA-256算法,使用指定的键和BASE64URL编码结果,计算JWS签名输入ASCII(BASE64URL(UTF8(JWS保护头))| |'.| | BASE64URL(JWS有效负载))的HMAC 在jws示例中,它给出了“dBjftJeZ4CVP-mB92K27uhbUJU1p1r\u wW1gFWFOEjXk”作为签名,而我得到了“ZekyXWlxvuCN9H8cuDrZfaRa3pMJhHpv6QKFdUqXbLc=”。有什么问题吗 这是我的python3代码Jwt 无法获得rfc7515第3.3节中的相同签名,jwt,hmac,Jwt,Hmac,在中,有一个jws示例: BASE64URL(UTF8(JWS保护头))=eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 BASE64URL(JWS有效载荷)=EYJPC3MIOIJQB2UILA0KIJLEHAIOJEZMDA4MTKZODASDQOGIMH0Dha6ly9LegftCGXLLMNVBS9PC19YB290IJP0CNVLFQ 其密钥是jwk: {“kty”:“oct”, “k”:“AyM1SysPpbyDfgZld3umj1qzKObwVMk
import hashlib
import hmac
import base64
message = bytes('eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ','ascii')
secret = bytes('AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow','utf-8')
signature = base64.urlsafe_b64encode(hmac.new(secret, message, digestmod=hashlib.sha256).digest())
print(signature)
我发现直接用密钥字节签名是错误的。我应该使用base64url\u解码(键)。然后我得到了正确的签名“dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk=”
import hashlib
import hmac
import base64
message = bytes('eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ','ascii')
secret = base64.urlsafe_b64decode('AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow==')
signature = base64.urlsafe_b64encode(hmac.new(secret, message, digestmod=hashlib.sha256).digest())
print(signature)