FROM_BASE64
功能描述
根据BASE64编码规则,将一个BASE64编码的字符串解码,返回字符串的解码结果。
返回值类型:text
编码规则
将输入的每三个字节(24位)变成四个字节(32位):6位为一组,高位补两个0,组成一个字节,这样正好能将三个字节补成四个字节,其中每个字节只会对应0(00000000)到63(00111111)。
每76个字符加一个换行符。
编码0(00000000)到61(00111111)对应A-Z,a-z,0-9共62个字符,62(00111110)的编码是
+
,63(00111111)的编码是/
。若输入的字符串字节数不为三的倍数,那么剩余的字节根据编码规则转换,若有一个字节不满8位,则在低位补0补满8位,同时用“=”将转换结果补满四个字节。若最后一组只有两个字节,每6位一组,第三组只有4位,低位要补两个0,然后这三组再分别高位补两个0,转成三个字符,末尾补一个“=”;若最后一组只有一个字节,每6位一组,第二组只有2位,低位要补四个0,然后这两组再分别高位补两个0,转成两个字符,末尾补两个“=”。
解码规则
将输入的字符串用二进制表示,去掉每个字节高位的两个0。
根据编码规则,正确的编码字节数必为4的倍数。若末尾有“=”,则根据“=”数量去掉最后一个除“=”以外的字节低位的0。若末尾有一个“=”,即最后四个字节为
***=
,则将前三个字节转二进制后再去掉最后两个0,若末尾有两个“=”,即最后四个字节为**==
,则将前两个字节转二进制后再去掉最后四个0。将去掉高位0后的各个字节按顺序拼接,每8位转成一个字符。
注意事项
如果输入的是NULL,那么返回的结果为NULL。
语法格式
FROM_BASE64(str)
参数说明
str
待解码的任意长度字符串。
示例
示例1: 'YWJj'
SELECT FROM_BASE64('YWJj');
返回结果为:
from_base64
-------------
abc
(1 row)
解码过程分析
1、字符串用二进制表示为:00011000(Y)00010110(W)00001001(J)00100011(j)
。
2、去掉每个字节高位的两个0后变成:011000 010110 001001 100011
。
3、将去掉高位0后的各个字节按顺序拼接成:01100001(a)01100010(b)01100011(c)
。
4、故解码结果为abc。
示例2: 'YWI='
SELECT FROM_BASE64('YWI=');
返回结果为:
from_base64
-------------
ab
(1 row)
解码过程分析
1、字符串用二进制表示为:00011000(Y)00010110(W)00001000(I)
。
2、去掉每个字节高位的两个0后变成:011000 010110 001000
。
3、由于末尾有一个“=”,则第三个字节末尾的0也要去掉再拼接:01100001 01100010
。
4、故解码结果为ab。