我的编程空间,编程开发者的网络收藏夹
学习永远不晚

[20200103]GUID转换GUID_BASE64.txt

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

[20200103]GUID转换GUID_BASE64.txt

[20200103]GUID转换GUID_BASE64.txt

[20200103]GUID转换GUID_BASE64.txt

--//最近在做一个项目优化,里面大量使用uuid.优缺点在链接:http://blog.itpub.net.x.y265/viewspace-2670513/=>[20191225]主键使
--//用uuid优缺点.txt 有相关讨论.我自己的观点不要滥用,或者讲到处都用,合理使用才是比较正确的选择.

--//昨天看12c相关书籍,发现oracle给每个PDB设置唯一GUID.我查看视图V$CONTAINERs,发现有1个字段GUID_BASE64,很明显这个从guid转
--//换过来,自己想知道这个转换如何实现的?

1.环境:
SYS@192.168.x.y:1521/orclcdb> select banner from v$version;
BANNER
----------------------------------------------------------------------
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production

SYS@192.168.x.y:1521/orclcdb> select sys_guid() from dual ;
SYS_GUID()
--------------------------------
9B25CF226E3E36A5E0558253DD747177

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==

--//注意看sys_guid()后面16位E0558253DD747177,居然没有变化,不知道为什么.
--//GUID_BASE64后面2位是字符"==",不可能3个正好都是==,一定是用来填充保持字符串长度24.

2.首先我必须确定GUID_BASE64的编码:
--//base64,我的理解就是64进制,确定编码很重要,最容易联想到的rowid编码也是64进制,是否其编码与它一样.
--//我检索发现如下链接:
https://docs.oracle.com/cd/E18150_01/javadocs/DevelopmentKit/com/stc/connector/framework/util/Base64.html

--//内容如下:
            Table 1: The Base64 Alphabet
Value Encoding  Value Encoding  Value Encoding  Value Encoding
   0 A            17 R            34 i            51 z
   1 B            18 S            35 j            52 0
   2 C            19 T            36 k            53 1
   3 D            20 U            37 l            54 2
   4 E            21 V            38 m            55 3
   5 F            22 W            39 n            56 4
   6 G            23 X            40 o            57 5
   7 H            24 Y            41 p            58 6
   8 I            25 Z            42 q            59 7
   9 J            26 a            43 r            60 8
  10 K            27 b            44 s            61 9
  11 L            28 c            45 t            62 +
  12 M            29 d            46 u            63 /
  13 N            30 e            47 v
  14 O            31 f            48 w         (pad) =
  15 P            32 g            49 x
  16 Q            33 h            50 y
--//= 作为pad与看到结果一样.

The encoded output stream must be represented in lines of no more than 76 characters each. All line breaks or other
characters no found in Table 1 must be ignored by decoding software. In base64 data, characters other than those in
Table 1, line breaks, and other white space probably indicate a transmission error, about which a warning message or
even a message rejection might be appropriate under some circumstances.

编码的输出流必须以不超过76个字符的行表示。所有行打断或其他解码软件必须忽略表1中没有找到的字符。在base64数据中,除了那些
表1、断行和其他空白可能表示传输错误,有关该错误的警告消息或在某些情况下,即使是拒绝信息也可能是合适的。

Special processing is performed if fewer than 24 bits are available at the end of the data being encoded. A full
encoding quantum is always completed at the end of a body. When fewer than 24 input bits are available in an input
group, zero bits are added (on the right) to form an integral number of 6-bit groups. Padding at the end of the data is
performed using the "=" character. Since all base64 input is an integral number of octets, only the following cases can
arise: (1) the final quantum of encoding input is an integral multiple of 24 bits; here, the final unit of encoded
output will be an integral multiple of 4 characters with no "=" padding, (2) the final quantum of encoding input is
exactly 8 bits; here, the final unit of encoded output will be two characters followed by two "=" padding characters, or
(3) the final quantum of encoding input is exactly 16 bits; here, the final unit of encoded output will be three
characters followed by one "=" padding character.

如果在被编码数据的末尾有少于24位可用,则执行特殊处理。一个完整的编码量子总是在物体的末端完成。当一个输入中可用的输入位少
于24位时组,零位被添加(在右边)形成一个6位组的整数。数据末尾的填充物是使用"="字符执行。由于所有base64输入都是八进制的整数
,所以只有以下情况才能产生:
(1)编码输入的最终量子是24位的整数倍;这里是编码的最终单位输出将是4个字符的整数倍,没有"="填充.
(2)编码输入的最终数量是8位,编码输出的最终单位将是两个字符,后面跟着两个"="填充字符,或者
(3)编码输入的最终量子正好是16位;这里,编码输出的最终单位是三位字符后面跟着一个"="填充字符。

Because it is used only for padding at the end of the data, the occurrence of any "=" characters may be taken as
evidence that the end of the data has been reached (without truncation in transit). No such assurance is possible,
however, when the number of octets transmitted was a multiple of three and no "=" characters are present.

因为它只用于数据末尾的填充,所以任何"="字符的出现都可以作为数据结束的证据已经到达(在运输过程中没有截断)。不可能有这样的
保证,然而,当传输的八位数是三个的倍数,并且没有"="字符存在时。

Any characters outside of the base64 alphabet are to be ignored in base64-encoded data.

在base64编码的数据中,base64字母表之外的任何字符都将被忽略。

Care must be taken to use the proper octets for line breaks if base64 encoding is applied directly to text material that
has not been converted to canonical form. In particular, text line breaks must be converted into CRLF sequences prior to
base64 encoding. The important thing to note is that this may be done directly by the encoder rather than in a prior
canonicalization step in some implementations.

如果base64编码直接应用于尚未转换为规范形式。特别是,文本换行必须先转换成CRLF序列。base64编码。重要的是要注意的是,这可能
是由编码器直接完成的,而不是在以前完成的。规范化步骤在一些实现中。

NOTE: There is no need to worry about quoting potential boundary delimiters within base64-encoded bodies within
multipart entities because no hyphen characters are used in the base64 encoding.   

--//注:翻译我使用金山词霸,可能存在一些瑕疵...
--//这样base64的编码可以确定.A_Z a-z 0-9 +/

3.我写一个测试脚本:
 $ cat 64base.sh
#! /bin/bash
v2=$1
BASE64=($( echo {A..Z} {a..z} {0..9} + / ))

res=""
for i in $(echo "obase=64;ibase=16; $v2" | bc| tr -d "\ ")
do
    res=${res}${BASE64[$(( 10#$i ))]}
done

echo $res

$ ./64base.sh 74A69DC145F5662BE0558253DD747177
B0pp3BRfVmK+BVglPddHF3

--//完全对不上.我再仔细看链接https://docs.oracle.com/cd/E18150_01/javadocs/DevelopmentKit/com/stc/connector/framework/util/Base64.html
--//说明.
When fewer than 24 input bits are available in an input group, zero bits are added (on the right) to form an integral
number of 6-bit groups. Padding at the end of the data is performed using the "=" character.

--//有1个非常明显的提示 "zero bits are added (on the right) to form an integral number of 6-bit groups".
--//guid的显示74A69DC145F5662BE0558253DD747177,占32字符.32*4 = 128 bits.
--//base64 相当于2^6,也就是6 bits表示1个64进制字符.
--//128/6 = 21.333,明显无法整除,这样结尾要补上1个0(占4bits).
--//(128+4)/6 = 22,这样正好整除.
--//补上1个0再计算如下:

$ ./64base.sh 74A69DC145F5662BE0558253DD7471770
dKadwUX1ZivgVYJT3XRxdw

--//^_^正好对上.可以验证看看.

$ echo 64A52F53A7683286E053CDA9E80AED760 742DCFA2CE044FDEE0558253DD7471770 74A69DC145F5662BE0558253DD7471770 | tr " " " " | xargs -IQ ./64base.sh Q
ZKUvU6doMobgU82p6Artdg
dC3Pos4ET97gVYJT3XRxdw
dKadwUX1ZivgVYJT3XRxdw

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==
--//对比完全能对上.当然不包括后面的两个=.

4.修改脚本如下:
$ cat o64base.sh
#! /bin/bash
# convert guid to guid_base64
odebug=${ODEBUG:-0}

v2=${1}0
BASE64=($( echo {A..Z} {a..z} {0..9} + / ))

res=""
for i in $(echo "obase=64;ibase=16; $v2" | bc| tr -d "\ ")
do
    res=${res}${BASE64[$(( 10#$i ))]}
done

if [ $odebug -eq 1 ] ; then
    echo v2=$v2 res=$res
fi

res=${res}==
echo $res

$ ./o64base.sh 74A69DC145F5662BE0558253DD747177
dKadwUX1ZivgVYJT3XRxdw==

5.总结:
--//纯属无聊,浪费一个下午探究这个问题.
--//在测试时我使用链接https://toolslick.com/conversion/data/guid的在线转换工具,不然估计我无法猜测到如何实现.

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

[20200103]GUID转换GUID_BASE64.txt

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

[20200103]GUID转换GUID_BASE64.txt

[20200103]GUID转换GUID_BASE64.txt--//最近在做一个项目优化,里面大量使用uuid.优缺点在链接:http://blog.itpub.net.x.y265/viewspace-2670513/=>[20191225]主键使--//
[20200103]GUID转换GUID_BASE64.txt
2018-05-14

怎么将chm转换成txt

本篇文章给大家分享的是有关怎么将chm转换成txt,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先在chm文件所在目录新建一个文本文档,如:在D盘中有一个名为xitongzh
2023-06-15

html格式如何转换为txt格式

这篇文章将为大家详细讲解有关html格式如何转换为txt格式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方便,适合初学前端
2023-06-14

Word2016文件怎么转换为txt文件

要将Word 2016文件转换为txt文件,可以按照以下步骤操作:1. 打开Word 2016文件。2. 在菜单栏上选择“文件”选项。3. 在弹出的菜单中,选择“另存为”选项。4. 在“另存为”对话框中,选择要保存文件的位置和文件名。5.
2023-09-15

C#实现Word转换TXT的方法详解

这篇文章主要为大家详细介绍了如何利用C#实现Word转换TXT的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-22

python中的txt文件怎么转换为XML

这篇文章主要介绍了python中的txt文件怎么转换为XML的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中的txt文件怎么转换为XML文章都会有所收获,下面我们一起来看看吧。txt文件转换为XML
2023-07-04

linux中shell如何实现txt转换成html

小编给大家分享一下linux中shell如何实现txt转换成html,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!原理: awk命令,分割格式化的txt(txt文
2023-06-09

linux shell txt转换成html的实现代码

原理: awk命令,分割格式化的txt(txt文件格式以“|”分割开的)成数组,然后拼接成html格式(html - head - title - body - table) shell源码# !/bin/shfile_input='txt
2022-06-04

C#中如何实现EXCEL转换成TXT文档

这篇文章主要为大家展示了“C#中如何实现EXCEL转换成TXT文档”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中如何实现EXCEL转换成TXT文档”这篇文章吧。C#数据转换前excel中的
2023-06-17

如何用ADO.NET实现txt与Excel的互相转换

本篇文章为大家展示了如何用ADO.NET实现txt与Excel的互相转换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在园子里看过很多文章,关于设计模式,关于架构等等,我在这里谈谈一些软件的功能,为
2023-06-17

Java实现将TXT文本文件转换为PDF文件

Java实现TXT文本文件转换为PDF文件通过Java的iText库,可以将TXT文本文件转换为PDF文件,步骤如下:导入iText库并创建PDF文档。读取TXT文件内容并添加到PDF文档。关闭PDF文档,完成转换。优点:简单易用可定制跨平台注意事项:确保TXT文件编码正确。大文件转换可能需时。可使用压缩算法减小PDF文件大小。
Java实现将TXT文本文件转换为PDF文件
2024-04-02

如何使用vbs将HTML或txt文件转换为ASP输出

这篇文章将为大家详细讲解有关如何使用vbs将HTML或txt文件转换为ASP输出,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用方法:手工修改html文件的名称与想要生成的asp的文件名称,然后将下面的
2023-06-08

Python怎么读写txt文件和转换csv文件与pandas条件

这篇文章主要介绍“Python怎么读写txt文件和转换csv文件与pandas条件”,在日常操作中,相信很多人在Python怎么读写txt文件和转换csv文件与pandas条件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-06-02

Linux系统下把txt转换为mobi格式电子书的方法

这篇文章主要讲解了“Linux系统下把txt转换为mobi格式电子书的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统下把txt转换为mobi格式电子书的方法”吧!1. 安装
2023-06-12

PPOCRLabel标注的txt格式怎么转换成labelme能修改的json格式

这篇“PPOCRLabel标注的txt格式怎么转换成labelme能修改的json格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
2023-07-05

编程热搜

目录