Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;使用boost和openssl错误 我是一个相当初级的C++程序员(我还在上大学,所以我想我一般都是新手程序员),我正在尝试用C++生成JWT。我能够生成并编码报头和有效负载,但是当我在jwt.io上检查时,我使用openssl的hmac库生成的签名似乎无效。我有一种感觉,这是由于一些细微的错误,我只是没有看到。如果你能找到我的bug,我将非常感激。如果您对如何改进我的代码有任何建议,我们将不胜感激。注意,我必须使用openssl和boost for json_C++_Openssl_Jwt_Json Web Token - Fatal编程技术网

C++;使用boost和openssl错误 我是一个相当初级的C++程序员(我还在上大学,所以我想我一般都是新手程序员),我正在尝试用C++生成JWT。我能够生成并编码报头和有效负载,但是当我在jwt.io上检查时,我使用openssl的hmac库生成的签名似乎无效。我有一种感觉,这是由于一些细微的错误,我只是没有看到。如果你能找到我的bug,我将非常感激。如果您对如何改进我的代码有任何建议,我们将不胜感激。注意,我必须使用openssl和boost for json

C++;使用boost和openssl错误 我是一个相当初级的C++程序员(我还在上大学,所以我想我一般都是新手程序员),我正在尝试用C++生成JWT。我能够生成并编码报头和有效负载,但是当我在jwt.io上检查时,我使用openssl的hmac库生成的签名似乎无效。我有一种感觉,这是由于一些细微的错误,我只是没有看到。如果你能找到我的bug,我将非常感激。如果您对如何改进我的代码有任何建议,我们将不胜感激。注意,我必须使用openssl和boost for json,c++,openssl,jwt,json-web-token,C++,Openssl,Jwt,Json Web Token,****更新**** 我发现正在添加额外的新行,这会在身份验证过程中导致错误。目前我正在调用str.erase来删除它们,但如果有人能告诉我它们将从哪里来,我将不胜感激,这样我就可以避免操纵字符串 char*Auth::genJWT() { ptree-pt; std::stringstream jwt; //制作和编码标题 pt.put(“典型”、“JWT”); pt.put(“alg”、“HS256”); std::ostringstream buf; 写入json(buf、pt、fals

****更新****

我发现正在添加额外的新行,这会在身份验证过程中导致错误。目前我正在调用str.erase来删除它们,但如果有人能告诉我它们将从哪里来,我将不胜感激,这样我就可以避免操纵字符串


char*Auth::genJWT()
{
ptree-pt;
std::stringstream jwt;
//制作和编码标题
pt.put(“典型”、“JWT”);
pt.put(“alg”、“HS256”);
std::ostringstream buf;
写入json(buf、pt、false);
std::string header=buf.str();

jwtOpenSSL在每64个字符后插入一个换行符,您可以使用以下方法禁用此操作:

BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
看这里

在测试代码时,我还发现了以下两个问题:

1) 在使缓冲区URL安全时跳过缓冲区的最后一个字符。应删除-1

for(unsigned int i = 0; i < bptr->length ; i++)
for(无符号整数i=0;ilength;i++)
2) 当使Base64输出URL安全时,您需要将“+”替换为“-”,将“/”替换为“\u”。您的代码正好相反。因此:

case '+':
    ss << '-';
    break;
case '/':
    ss << '_';
    break;
大小写“+”:
党卫军
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
for(unsigned int i = 0; i < bptr->length ; i++)
case '+':
    ss << '-';
    break;
case '/':
    ss << '_';
    break;