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

[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

© 版权声明
THE END
支持一下吧
点赞14 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容