정수의 Base64 값을 확인하는 방법은 무엇입니까?

정수의 Base64 값을 확인하는 방법은 무엇입니까?

나는 그것을 확인하고 싶다Base64정수 값. Linux 명령이 있지만 base64이를 정수에 적용하는 방법을 이해할 수 없습니다.

시도했지만 base64 10오류 메시지가 나타납니다.base64: 10: No such file or directory

문제는 Base64가 바이너리를 텍스트로 변환하는 데 사용되므로 텍스트 매개변수를 전달할 필요가 없다는 점일 수 있다고 생각합니다. 따라서 내 인수는 10이진수 대신 텍스트 문자열로 읽혀집니다. 텍스트 매개변수를 바이너리로 변환하는 방법이 있나요?

base64 명령을 사용하여 정수의 Base64 값을 얻는 방법은 무엇입니까?

답변1

숫자를 16진수로 변환한 다음 echo해당 바이트 시퀀스를 인쇄하고 파이프하는 데 사용 base64됩니다. 따라서 base64를 사용하여 정수 10을 인코딩하려면 다음을 사용합니다.

echo -en '\xA' | base64

결과를 설명해보자. 바이트 10에는 다음과 같은 이진 표현이 있습니다.

00001010

Base64가 하는 일은 이 데이터를 6비트 그룹으로 나누는 것입니다. 따라서 패딩을 사용하면 다음 두 개의 6let을 얻을 수 있습니다.

000010 100000

십진수 표현은 각각 문자 C와 g에 해당하는 2와 32입니다.

답변2

아래 명령은 10진수를 64진수로 변환합니다. Base64 인코딩 체계를 사용하지 않지만 문자를 숫자로 사용하는 Base64 인코딩 체계의 URL 안전 변형을 사용합니다.

awk 'NR==FNR{a[NR-1]=$0;next}{if($0==0){print"A";next}o="";for(n=$0;n!=0;n=int(n/64))o=a[n%64]o;print o}' <(printf %s\\n {A..Z} {a..z} {0..9} - _) -

다음 명령은 Bash에서 동일한 작업을 수행합니다. .Zsh 로 바꾸면 l%64Zsh에서도 작동합니다 l%64+1.

unset a;a=({A..Z} {a..z} {0..9} - _);while IFS= read l;do if ((l==0));then echo A;continue;fi;o=;for ((;l!=0;l/=64));do o=${a[l%64]}$o;done;printf %s\\n "$o";done

이는 64진수를 10진수로 변환합니다.

awk 'NR==FNR{a[$0]=NR-1;next}{o=0;for(i=NF;i>=1;i--)o+=a[$i]*64^(NF-i);print o}' FS= <(printf %s\\n {A..Z} {a..z} {0..9} - _) -

이는 Bash에서도 동일한 작업을 수행합니다.

unset a;i=0;declare -A a;for x in {A..Z} {a..z} {0..9} - _;do a[$x]=$((i++));done;while IFS= read l;do o=0;for((i=${#l};i>=1;i--));do let o+=${a[${l:i-1:1}]}*64**(${#l}-i);done;echo "$o";done

이러한 awk명령을 사용하면 2**53+1숫자가 더 많이 손실되고 정밀도가 크게 손실되지만 이를 방지하려면 4.1 이상에서 -M( )를 추가할 수 있습니다.--bignumgawk

Bash 명령은 정수 오버플로 2**63와 더 큰 숫자를 발생시킵니다.

관련 정보