json 파일을 기반으로 문자열을 올바르게 인코딩하는 방법은 무엇입니까?

json 파일을 기반으로 문자열을 올바르게 인코딩하는 방법은 무엇입니까?

다음 파일이 있습니다 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.

예를 들어, 전체 JSON 객체를 file 로 인코딩하려면 basic.json다음과 같이 사용할 수 있습니다.

$ jq -r '. | @base64 | "Basic \(.)"' basic.json
Basic eyJ1c2VyIjoidXNlciIsInBhc3MiOiJwYXNzd29yZCJ9

"Basic \(.)"필터는 원하는 형식을 얻기 위해 문자열 보간만 사용합니다.


이러한 필터를 보다 일반적으로 사용하면 특정 값을 인코딩할 수 있습니다.

$ jq '.pass |= @base64' basic.json
{
  "user": "user",
  "pass": "cGFzc3dvcmQ="
}

답변2

jqAND 연산자를 사용합니다 @base64.

<basic.json jq '"Basic " + ("\(.user):\(.pass)"|@base64)'
"Basic dXNlcjpwYXNzd29yZA=="

user그리고 그 값은 연산자 에게 pass문자열로 제공됩니다. base64이제 남은 것은 간단한 문자열 연결뿐입니다.

관련 정보