[20250409]GUID转换GUID_BASE64(增补3).txt

打印 上一主题 下一主题

主题 1713|帖子 1713|积分 5139

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表