[20250409]GUID转换GUID_BASE64(补充3).txt
–//前面写的bash shell脚本没有追加结尾的=,尝试完善该脚本。
$ cat o64basex.sh
#! /bin/bash
# convert guid to guid_base64
odebug=${ODEBUG:-0}
v2=${1}
v3=${2:-4}
BASE64=($( echo {A..Z} {a..z} {0..9} + / ))
res=”
for i in $(echo “obase=64;ibase=16; $v2 * $v3” | bc| tr -d ‘\\\r\n’)
do
res=${res}${BASE64[$(( 10#$i ))]}
done
if [ $odebug -eq 1 ] ; then
echo v2=$v2 v3=$v3 res=$res
fi
#echo ${#res}
res=${res}$(seq $((24-${#res}))|xargs -IQ echo -n =)
echo $res
–//脚本做了简单处理,直接使用24-。
(1)编码输入的最终量子是24位的整数倍;这里是编码的最终单位输出将是4个字符的整数倍,没有”=”填充.
(2)编码输入的最终数量是8位,编码输出的最终单位将是两个字符,后面跟着两个”=”填充字符,或者
(3)编码输入的最终量子正好是16位;这里,编码输出的最终单位是三位字符后面跟着一个”=”填充字符。
–//简单验证看看:
–//21c下:
SYS@book> select CON_ID,DBID,CON_UID,NAME,GUID,GUID_BASE64 from V$CONTAINERs;
CON_ID DBID CON_UID NAME GUID GUID_BASE64
—— ———- ———- ——– ——————————– ————————
1 1617337831 1 CDB$ROOT C8209F27C6B16005E053362EE80AE60E yCCfJ8axYAXgUzYu6ArmDgA=
2 2763294012 2763294012 PDB$SEED 1F36DBBBA2C8169BE0636538A8C04D12 Hzbbu6LIFpvgY2U4qMBNEgA=
3 1073777561 1073777561 BOOK01P 1F36F47256D41C08E0636538A8C03260 Hzb0clbUHAjgY2U4qMAyYAA=
$ echo -n 1F36F47256D41C08E0636538A8C0326000|xxd -r -p | base64
Hzb0clbUHAjgY2U4qMAyYAA=
$ ./o64basex.sh 1F36F47256D41C08E0636538A8C03260 “4*10*10”
Hzb0clbUHAjgY2U4qMAyYAA=
$ ./o64basex.sh 1F36F47256D41C08E0636538A8C03260 400
Hzb0clbUHAjgY2U4qMAyYAA=
–//18c下:
SYS@192.168.x.y:1521/orclcdb> select CON_ID,DBID,CON_UID,NAME,GUID,GUID_BASE64 from V$CONTAINERs;
CON_ID DBID CON_UID NAME GUID GUID_BASE64
—— ———- ———- ——– ——————————– ————————
1 2756091850 1 CDB$ROOT 64A52F53A7683286E053CDA9E80AED76 ZKUvU6doMobgU82p6Artdg==
2 1474312904 1474312904 PDB$SEED 742DCFA2CE044FDEE0558253DD747177 dC3Pos4ET97gVYJT3XRxdw==
3 115310104 115310104 ORCL 74A69DC145F5662BE0558253DD747177 dKadwUX1ZivgVYJT3XRxdw==
$ echo -n 74A69DC145F5662BE0558253DD747177|xxd -r -p | base64
dKadwUX1ZivgVYJT3XRxdw==
$ ./o64basex.sh 74A69DC145F5662BE0558253DD747177 10
dKadwUX1ZivgVYJT3XRxdw==
–//完全对上。
–//再次修改如下:
$ cat o64basex.sh
#! /bin/bash
# convert guid to guid_base64
odebug=${ODEBUG:-0}
v2=${1}
v3=${2:-1}
BASE64=($( echo {A..Z} {a..z} {0..9} + / ))
res=”
for i in $(echo “obase=64;ibase=16; $v2 * $v3” | bc| tr -d ‘\\\r\n’)
do
res=${res}${BASE64[$(( 10#$i ))]}
done
if [ $odebug -eq 1 ] ; then
echo v2=$v2 v3=$v3 res=$res
fi
# echo ${#res}
len=$(( (${#res} / 4 +1)*4 ))
#res=${res}$(seq $(($len-${#res}))|xargs -IQ echo -n =)
res=${res}$(seq $((len-${#res}))|xargs -IQ echo -n =)
echo $res
$ ./o64basex.sh 74A69DC145F5662BE0558253DD747177 10
dKadwUX1ZivgVYJT3XRxdw==
$ ./o64basex.sh 1F36F47256D41C08E0636538A8C03260 400
Hzb0clbUHAjgY2U4qMAyYAA=
–//测试长一点点的字符串。
$ ./o64base.sh 1F36F47256D41C08E0636538A8C03260000001 10
Hzb0clbUHAjgY2U4qMAyYAAAAQ==
$ echo -n 1F36F47256D41C08E0636538A8C03260000001|xxd -r -p | base64
Hzb0clbUHAjgY2U4qMAyYAAAAQ==
–//完全一致。
–//当然bash shell 版本的执行效率肯定没有base64的执行效率高。bash shell的编程特点是快速完成编程解决工作中的一些复杂性
–//操作问题,执行效率并不是主要考虑的问题,只要慢到不能接受的程度才考虑其他编程方式。
来源链接:https://www.cnblogs.com/lfree/p/18817296
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
暂无评论内容