Base64是什么?
Base64编码的用途是为了传输和传输安全(其实并不太安全)。
它的算法是:每3个字节(每字节8bit),转换为4个6bit的字节(一个字节应该是8bit,所以前2位补0),然后每个6位前2位(高位)被2个零。例如:
xxxxxxxx yyyyyyyy xxxxyyyy这里转换前的3个字节,然后,每6位分到一个字节中:
xxxxxx xxyyyy yyyyxx xxyyyy
然后高位补0
00xxxxxx 00xxyyyy 00yyyyxx 00xxyyyy
其中xy是二进制的0和1,然后再按base64码表进行替换(base64,基本的64个码,=号不在其内)
0 A
|
16 Q
|
32 g
|
48 w
|
1 B
|
17 R
|
33 h
|
49 x
|
2 C
|
18 S
|
34 i
|
50 y
|
3 D
|
19 T
|
35 j
|
51 z
|
4 E
|
20 U
|
36 k
|
52 0
|
5 F
|
21 V
|
37 l
|
53 1
|
6 G
|
22 W
|
38 m
|
54 2
|
7 H
|
23 X
|
39 n
|
55 3
|
8 I
|
24 Y
|
40 o
|
56 4
|
9 J
|
25 Z
|
41 p
|
57 5
|
10 K
|
26 a
|
42 q
|
58 6
|
11 L
|
27 b
|
43 r
|
59 7
|
12 M
|
28 c
|
44 s
|
60 8
|
13 N
|
29 d
|
45 t
|
61 9
|
14 O
|
30 e
|
46 u
|
62 +
|
15 P
|
31 f
|
47 v
|
63 /
|
从码表中可以得知,base64编码后的字串只包含在小写字母,数字,还有+/这2个特殊字符。
还有一些扩展的base64用法。例如用于url传递的其中把+号和左斜线换成了*和-
现在以Hello这个单词来测试一下,之前,先通过.net提供的base64转换方法得到它的base64编码。
public static string Base64Encoding(this string selfChar,Encoding encoding)
{
byte[] bb = selfencoding.GetBytes(selfChar);
return Convert.ToBase64String(bb);
}
在Ascii编码环境下
Hello这个单词有5个字母,就是5个字节,那么可以把它分为Hel lo两部分。第一部分的Hel是3个字节,它的二进制格式为(可以查ascii表,也可以由上一篇中给出的方法求):010010000110010101101100
然后分为4个6位:010010 000110 010101 101100
然后高位补0:00010010 00000110 00010101 00101100,然后换算为10进制为18 6 21 44
然后与码表对应替换:SGVs
下边对后2个字节进行编码。因为base64要求8*3——6*4,然后才进行下一步计算。这里只有2个字节,那应该对其补,补就是用=号来替换。
开始:lo的二进制为0110110001101111
因为不够24位,所以分为3个6位字节011011 000110 111100
011011 000110 111100,10进制数为:27 6 60,然后再补一个=号就是
bG8=
与上边的连起来就是SGVs bG8=
在程序中验证,这个是正确的。
再做一个汉字语句的base64编码:赵。
在utf-8编码下,它的二进制是:111010001011010110110101
它有3个字节,分为4个字节:111010 001011 010110 110101,补0:00111010 00001011 00010110 00110101
10进制是:58 11 22 53
码表:6LW1。
在GB2312环境下的64位编码是怎样的?
“赵”字的gb2312编码环境下的字节有2个,它的二进制位是:1101010111010100,分为6位的:
110101 011101 010000
对应的10进制是:53 29 16,对应码表是1dQ,然后补=号就是
1dQ=
在Ascii环境下的64位编码是怎样的?
“赵”字不在Ascii码内(ascii在127之内)。那么对于编码环境下不存在的字符怎么样处理呢?
在ascii环境下,任何大于127的,即U+007F(unicode编码127的),则由ascii的问号替换。
然后,问号在unicode值下是63(Ascii下也是,这是10进制数),63的二进制是:111111。这是一个字节(按Base64编码算法,要补齐3个字节,所以最后要加2个等号),它应该是:00111111,然后每6位分一字节:001111 110000
不足的在后边补0,这个补0与6位变8位补不是一样的概念。那么这两个8位的10进制数是:
15 48,对应码表就是Pw,
然后还要加上2个等号==
最后变成了Pw==
ANSI
American National Standards Institute(ANSI——美国国家标准局)
为使计算机支持更多语言,通常使用 0x80—0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。
不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。
不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。
相关推荐
' =========================...' 功能: 将字符编码为Base64编码 xiaomabuhei=>eGlhb21hYnVoZWk= ' [StrA] 预备编码的字符 ' ======================================================================================
提供一种Base64编码,并输出UTF-8格式的BASE64编码方式。本程序在微信小程序开发工具中已经测试通过。 Base64代码: [javascript] view plain copy print? (function(){ var BASE64_MAPPING = [ 'A','B','C','D',...
PB关于字符进制数转化及base64加密、解密 1、字符型十六进制数转为十进制数值 2、十进制数转为十六进制字符 3、base64加密 4、base64解密 5、将blob转为byte数组
简单实现js对字符串进行base64转码/解码
base 64编码可以将任意一组字节转换为较长的常见文本字符序列,从而可以合法地作为首部字段值。base 64编码将用户输入或二进制数据,打包成一种安全格式,将其作为HTTP首部字段的值发送出去,而无须担心其中包含会...
需要一个二进制与BASE64相互转换的函数,从网上找...示例中提供二进制与16进制字符串转换函数ConvertHexStrToBin与ConvertBinToHexStr,二进制与BASE64编码转换函数Base64Encode与Base64Decode,在VC6下编译通过可用。
c#中 base64字符串与普通字符串互转,转成 Base64 形式的...
字符串内容编码为base64 繁殖将base64解码为字符串
1.Java生成二维码示例 2.图片保存到本地或生成Base64编码 3.Base64编码生成图片
由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括...
标注base64编码方式 Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。 关于这个编码的规则...
BASE64编码是一种常用的将二进制数据转换为可打印字符的编码。讲解了编码原理以及base64函数
一个用于将字符串编码成 Base16/Base32/Base64/MD5/SHA-1 的库,兼容所有浏览器和宿主环境。
Hex十六进制/Base64编码转换器,可对字符串文本进行十六进制及Base64编码与反编码
大学计算机基础字符的编码——区位码和国标码PPT学习教案.pptx
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论...
网上都是针对文件图片的Base64处理, 补充这个工具处理文本,字符串。 编码为UTF8。
Base64转String字符串,支持将Base64转化为String字符串
javascript 下,将字符串按gbk方式编码的Base64加解码。js gbk的base64
java端:返回类型非字符接口调用StringUtils#base64AndCompressJson进行编码压缩 ,返回类型为字符接口调用StringUtils#base64Andcompress js 端:引入压缩包中的js文件 ,调用deBase64AndUncompress进行解压解码