我有以下basic.json
文件:
{
"user": "user",
"pass": "password"
}
我正在尝试将其编码为 Base64,如下所示:
"Basic dXNlcjpwYXNzd29yZA=="
我想我已经很接近了:
echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64)
我用过jq访问方法在这里找到。
我用过在这里找到base64方法。
但结果是错误的:
Basic InVzZXIiOiJwYXNzd29yZCIK
我已经尝试过-e
文章中提到的标志:
echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64 -e)
但它会抛出这个错误:
base64:无效选项 -- 'e'
我哪里搞错了?
提前致谢。
我的解决方案
命令是这样结束的:
RUN echo "map \"\" \$basicAuth {\n\
\tdefault $(jq '"Basic " + ("\(.user):\(.pass)" | @base64)' basic.json);\n\
}" > basic.conf
我的basic.conf
文件终于有了正确的基本身份验证:
map "" $basicAuth {
default "Basic dXNlcjpwYXNzd29yZA==";
}
谢谢你们
答案1
jq
提供了许多输出格式过滤器,包括@base64
.
例如,如果你想在 file 中编码整个 JSON 对象basic.json
,那么你可以使用类似的东西
$ jq -r '. | @base64 | "Basic \(.)"' basic.json
Basic eyJ1c2VyIjoidXNlciIsInBhc3MiOiJwYXNzd29yZCJ9
该"Basic \(.)"
过滤器仅使用字符串插值来获得您想要的格式。
这种过滤器的更常规用途可能是对特定值进行编码。
$ jq '.pass |= @base64' basic.json
{
"user": "user",
"pass": "cGFzc3dvcmQ="
}
答案2
使用jq
和@base64
运算符:
<basic.json jq '"Basic " + ("\(.user):\(.pass)"|@base64)'
"Basic dXNlcjpwYXNzd29yZA=="
user
并且pass
值作为字符串给出给base64
运算符。剩下的就是简单的字符串连接。