马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
[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的编程特点是快速完成编程解决工作中的一些复杂性
--//操纵题目,执行效率并不是重要考虑的题目,只要慢到不能继承的程度才考虑其他编程方式。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |