如何检查整数的 Base64 值?

如何检查整数的 Base64 值?

我想检查一下Base64整数值。有一个base64linux 命令,但我不明白如何将它应用于整数。

我尝试过base64 10,但随后收到错误消息base64: 10: No such file or directory

我认为问题可能在于 Base64 用于二进制到文本的转换,因此没有必要向其传递文本参数。所以我的论点10被读取为文本字符串而不是二进制数。有什么方法可以将文本参数转换为二进制吗?

如何使用 base64 命令获取整数的 Base64 值?

答案1

将数字转换为十六进制,然后用于echo打印相应的字节序列并将其通过管道传输到base64.因此,要使用 base64 对整数 10 进行编码,您可以使用:

echo -en '\xA' | base64

来解释一下结果。字节 10 具有以下二进制表示形式:

00001010

Base64 的作用是将这些数据分成 6 位组。因此,通过填充,我们得到以下两个 6let:

000010 100000

十进制表示为2和32,分别对应字母C和g。

答案2

下面的命令将十进制整数转换为基数 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 中执行相同的操作。如果您替换l%64为 .Zsh ,它也适用于 Zsh 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 转换为十进制:

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( --bignum) 。gawk

Bash 命令会导致整数溢出2**63和更大的数字。

相关内容