什么是BASE64编码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是BASE64编码?相关的知识,希望对你有一定的参考价值。

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base64编码。
下面简单介绍Base64算法的原理,由于代码太长就不在此贴出
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码),这个表是这样的:
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
原文的字节最后不够3个的地方用0来补足,转换时Base64编码用=号来代替。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。
举一个例子,abc经过Base64编码以后的结果是YWJj.

发邮件的时候所写的信息自动在后台转换然后传输...
参考资料: http://www.luocong.com/articles/show_article.asp?Article_ID=17
参考技术A Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。
参考技术B base64是一种转义编码,通常用来加密字符串,
通常用来隐藏网络传输中的敏感信息。

比如在一些程序员活跃的地方,留敏感信息都是先将其进行base64加密。
然后内行都可以转码,
这样做是为了避免 自动收集数据的工具获取个人隐私,因为大部分账号都是邮箱什么的。
详细的原理在百科中有学术性的讲解。

什么是base62编码,和base64有什么区别

参考技术A 在网上冲浪的时候,阅读技术文章有时候会看到base62,你可能会问这个base62和base64有什么区别?base62有什么用,难道就是64-62=2的区别?
你还真说对了,与base64编码不同的是去除了两个符号,使得码空间由数字和英文字母组成,一般在短网址应用中会用到,下面列出几个语言的base62实现。
Javascript版
var Base62 = arr : new Array('v', 'P', 'h', '7', 'z', 'Z', 'w', 'A', '2', 'L', 'y', 'U', '4', 'b', 'G', 'q', '5', 't', 'c', 'V', 'f', 'I', 'M', 'x', 'J', 'i', '6', 'X', 'a', 'S', 'o', 'K', '9', 'C', 'N', 'p', '0', 'O', 'W', 'l', 'j', 'Y', 'T', 'H', 'Q', '8', 'R', 'E', 'n', 'm', 'u', '3', '1', 'B', 'r', 'd', 'g', 'e', 'D', 'k', 'F', 's'), log10 : function(x) return Math.log(x)/Math.log(10) , encode : function(str) var out = ''; for(var t = Math.floor(this.log10(str)/this.log10(62)); t>=0; t--) var a = Math.floor(str / Math.pow(62, t)); out += this.arr[a] str = str - (a * Math.pow(62, t)); return out; , decode : function(str) var out = 0; var len = str.length - 1; for(var t = 0; t <= len; t++) out = out + this.arr.indexOf(str.substr(t,1)) * Math.pow(62, len - t); return out; document.write(Base62.encode(10010));
C#版base62
public static class Base62 private static string Alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; public static String Encoding(ulong num) if (num < 1) throw new Exception("num must be greater than 0."); StringBuilder sb = new StringBuilder(); for (; num > 0; num /= 62) sb.Append(Alphabet[(int)(num % 62)]); return sb.ToString(); public static ulong Decoding(String str) str = str.Trim(); if (str.Length < 1) throw new Exception("str must not be empty."); ulong result = 0; for (int i = 0; i < str.Length; i++) result += (ulong)(Alphabet.IndexOf(str[i]) * Math.Pow(62, i)); return result;
Java版base62
public static StringBuffer encodeBase62(byte[] data)
StringBuffer sb = new StringBuffer(data.length * 2);
int pos = 0, val = 0;
for (int i = 0; i < data.length; i++)
val = (val << 8) | (data[i] & 0xFF);
pos += 8;
while (pos > 5)
char c = encodes[val >> (pos -= 6)];
sb.append(
/**/c == 'i' ? "ia" :
/**/c == '+' ? "ib" :
/**/c == '/' ? "ic" : c);
val &= ((1 << pos) - 1);


if (pos > 0)
char c = encodes[val << (6 - pos)];
sb.append(
/**/c == 'i' ? "ia" :
/**/c == '+' ? "ib" :
/**/c == '/' ? "ic" : c);

return sb;


public static byte[] decodeBase62(char[] data)
ByteArrayOutputStream baos = new ByteArrayOutputStream(data.length);
int pos = 0, val = 0;
for (int i = 0; i < data.length; i++)
char c = data[i];
if (c == 'i')
c = data[++i];
c =
/**/c == 'a' ? 'i' :
/**/c == 'b' ? '+' :
/**/c == 'c' ? '/' : data[--i];

val = (val << 6) | decodes[c];
pos += 6;
while (pos > 7)
baos.write(val >> (pos -= 8));
val &= ((1 << pos) - 1);


return baos.toByteArray();
本回答被提问者采纳
参考技术B

base64编码详解

以上是关于什么是BASE64编码?的主要内容,如果未能解决你的问题,请参考以下文章

Base64 编码知识,一文打尽!

Base64编码

前端对base64编码的理解,原生js实现字符base64编码

Base64编解码是什么?

Base64编码为什么会使数据量变大?

图片的base64编码的利与弊?