Arduino HMAC-SHA256 bearssl / bearssl_hmac.h

问题描述

我想使用Arduino框架为ESP8266实现JWT。我需要尽可能少的依赖关系。因此,我想使用“ bearssl / bearssl_hmac.h”库,因为该库已包含在框架中。不利的一面是,没有太多文献记载。 到目前为止,我所得到的是从'CreateToken'方法内部调用的'Sign'方法内部,但是串行调试输出只是如下所示的垃圾。 ��)...몆〜�j§��d。\�O�␞p�yJ␇�np��?p��?�␃��

    static void Sign(String payload,String secret,unsigned char buffer[32])
    {
        br_hmac_key_context keyCtx;
        br_hmac_key_init(&keyCtx,&br_sha256_vtable,secret.c_str(),secret.length());
        br_hmac_context hmacCtx;
        br_hmac_init(&hmacCtx,&keyCtx,0);
        br_hmac_update(&hmacCtx,payload.c_str(),payload.length());
        br_hmac_out(&hmacCtx,buffer);
    }

    static void CreateToken(JsonObjectConst& jsonObj)
    {
        char json[256];
        serializeJson(jsonObj,json);
        // DebugPrintln(json);

        auto encodedPayload = Encode(json,256);
        DebugPrintln(encodedPayload);
        
        char jsonWebToken[256];
        strcpy(jsonWebToken,HEADER);
        strcat(jsonWebToken,".");
        strcat(jsonWebToken,encodedPayload);

        DebugPrintln(jsonWebToken);

        char* secret = "Test";
        unsigned char buffer[32];

        Sign(jsonWebToken,secret,buffer);

        DebugPrintln((char*)buffer);
    }

你能给我任何帮助吗?

谢谢

解决方法

出于与您相同的原因,我今天正在调查此问题。我认为您可以得到很好的签名(至少您以与我相同的方式计算SHA256 HMAC)。

HEADER base64 url​​是否已编码? 另外,Encode base64 url​​是否编码json?

有了签名字节后,只需对它们进行base64 url​​编码,然后将其附加到jsonWebToken的末尾即可。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...