명령 및 padding 텍스트

2202 단어 LinuxmacOStech

tl;dr


mac 버전 base64에서padding 다음 문자열은 처리되지 않습니다.
파이프 같은 걸로 처리할 때 주의하는 게 좋을 것 같아요.

base64


이진법은 문자(a-zA-Z), 숫자(0-9), 몇 개의 기호(+/=)로 인코딩된 형식이다.JSON 등의 텍스트로 이미지와 같은 바이너리 데이터를 보내려는 경우 사용할 수 있습니다.

padding


base 64는 24비트당 4문자로 변환됩니다.입력이 부족하여 4글자가 될 수 없을 때 마지막으로 붙인 '=' 은padding입니다.

base 64 명령


Linux와 mac에서는 base 64 명령을 사용하여 base 64를 인코딩하고 디코딩할 수 있습니다.
특히 맥은 내장된 베이스 64 명령과 GNU 버전의 베이스 64 명령(gbase 64) 명령 두 가지 명령(※)을 사용할 수 있다.
용도와 기본 기능은 같지만 옵션과 행동은 조금 다르다.
※ coreutils 설치 필요

명령의 패딩 처리가 다르다


다음과 같은 차이가 있는 것 같습니다.
  • GNU 버전 base64(gbase64)에서padding 다음 문자열
  • 도 처리
  • mac 버전 base64에서padding 다음 문자열을 처리하지 않음
  • 언급된 웹 페이지를 찾지 못했기 때문에 아는 사람이 있으면 정보를 제공해 주십시오.

    원시 데이터


    베이스 64에서 ABCDEFG, hogehoge, hoge 세 줄을 인코딩한 파일입니다.
    QUJDREVGRwo=
    aG9nZWhvZ2UK
    aG9nZQo=
    

    GNU 버전 base 64(gbase 64)


    cat buzz | gbase64 -d                                                     
    ABCDEFG
    hogehoge
    hoge
    

    mac 버전 base 64


    ABCDEFG 행만 내보냅니다.
    cat buzz | base64 -D                                                     
    ABCDEFG
    

    어떤 영향이 있습니까?


    예컨대
  • API에서 base 64·padding이 포함된 JSON
  • 가져오기
  • base 64의 일부만 추출
  • base64 명령을 통해 디코딩
  • 할 때 파이프로 일련의 흐름을 연결하면 데이터의 누락과 분실이 곧 발생할 것이다.

    비키다


    순환하다


    나는 가장 간단하고 통용된다고 생각한다.
    #!/bin/bash
    while read line
    do
        echo $line | base64 -D
    done < buzz
    
    ./decode.sh
    ABCDEFG
    hogehoge
    hoge
    

    jq 명령


    JSON에 포함된 base64를 디코딩할 때만 jq 명령 base64 인코딩/디코딩 을 삽입할 수 있습니다.
    입력 데이터
    cat buzz.json 
    [
        "QUJDREVGRwo=",
        "aG9nZWhvZ2UK",
        "aG9nZQo="
    ]
    
    cat buzz.json | jq  ".[] | @base64d"
    "ABCDEFG\n"
    "hogehoge\n"
    "hoge\n"
    

    좋은 웹페이지 즐겨찾기