Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP
GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
RFC2045还规定每行位76个字符,每行末尾需添加一个回车换行符,即便是最后一行不够76个字符,也要加换行符。
实现原理
Base64实际上是对二进制码做分组转换操作
1.每3个8位二进制码位一组,转换为4个6位二进制码为一组(不足6位时地位补0)。3个8位二进制码和4个6位二进制码长度都是24位。
2.对获得的4个6位二进制码补位,每个6位二进制码添加两位高位0,组成4个8位二进制码。
3.将获得的4个8位二进制码转换为4个十进制码。
4.将获得的十进制码转换为Base64字符表中对应的字符。
字符串“A”,进行Base64编码,如下所示:
字符A
ASCII码 65
二进制码01000001
4个6位二进制码 010000010000
4个8位二进制码 0001000000010000
十进制码1616
字符表映射码QQ==
字符串“A”经过Base64编码后得到字符串“QQ==”。
结果出现了两个等号。很显然,当原文的二进制码长度不足24位,最终转换为十进制时也不足4项,这时就需要用等号补位。
将Base64编码后的字符串最多会有2个等号,这时因为:
余数 = 原文字节数 MOD 3。
字符串“密”,对其使用UTF-8编码等到Byte数组{-27,-81,-122},
字符 密
UTF-8编码 -27-81 -122
二进制码 1110010110101111 10000110
4个6位二进制码 111001011010 111110 000110
4个8位二进制码 0011100100011010 00111110 00000110
十进制码57 26 626
字符表映射码 5 a + G
字符串“密”经过Base64编码后得到字符串“5a+G”。
对照表:
索引 |
对应字符 |
索引 |
对应字符 |
索引 |
对应字符 |
索引 |
对应字符 |
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 |
|
|
15 |
P |
32 |
g |
49 |
x |
|
|
16 |
Q |
33 |
h |
50 |
y |
|
java实现
1.JDK实现:
-
importsun.misc.BASE64Decoder;
-
importsun.misc.BASE64Encoder;
-
-
-
publicclassBASE64{
-
-
publicstaticbyte[]decryptBASE64(Stringkey)throwsException{
-
return(newBASE64Decoder()).decodeBuffer(key);
-
}
-
-
-
publicstaticStringencryptBASE64(byte[]key)throwsException{
-
return(newBASE64Encoder()).encodeBuffer(key);
-
}
-
-
publicstaticvoidmain(String[]args)throwsException{
-
Stringdata=BASE64.encryptBASE64("http://aub.iteye.com/".getBytes());
-
System.out.println("加密前:"+data);
-
byte[]byteArray=BASE64.decryptBASE64(data);
-
System.out.println("解密后:"+newString(byteArray));
-
}
-
}
注意,sun.misc包是Sun公司提供给内部使用的专用API,在java API文档中我们看不到任何有关BASE64影子,不建议使用。
2.Apache的实现:(建议使用这种方式,当然,自己实现也可以)
参考org.apache.commons.codec.binary.Base64
下载地址:http://commons.apache.org/codec/download_codec.cgi
Apache还提供了,非标准的实现方式:
1.不再添加回车符。
2.Url Base64,也就是将“+”和“\”换成了“-”和“_”符号,且不适用补位。
分享到:
相关推荐
在标题"pb和java对称base64加密解密"中,涉及到了两个编程语言——PowerBuilder(pb)和Java,以及一种常用的编码方式——Base64。同时,描述中提到了MD5加密,这又是一种常见的哈希加密算法。下面我们将详细探讨...
这样的工具类在实际开发中非常实用,开发者可以方便地对字符串进行Base64编码解码,同时也可以进行MD5、DES和AES的加密解密操作,以满足不同层次的安全需求。 使用这些加密技术时,需要注意以下几点: - 对于敏感...
总的来说,这个资源为Android开发者提供了一套完整的BASE64加密解密解决方案,无论你是想要学习BASE64的工作原理,还是希望快速集成到项目中,这个压缩包都能满足需求。通过理解并应用这些知识,开发者能够更好地...
在iOS中实现3DES+Base64加密解密,可以使用CommonCrypto库,该库提供了低级别的加密操作接口。开发者需要自己编写代码来实现密钥的生成、数据的分组以及3DES的加密解密过程,并结合Base64编码解码函数。 需要注意的...
在标题提到的“Base64加密解密控制台程序”中,这是一个命令行应用程序,专为处理Base64编码和解码而设计。它允许用户输入需要编码或解码的数据,然后通过程序完成转换过程。在网络安全领域,这种工具可以用于加密...
2. **Java中的Base64加密解密** 在`Base64.java`文件中,可能实现了`java.util.Base64`类的功能。Java 8开始引入了内置的Base64支持,提供`Encoder`和`Decoder`接口,可以方便地进行Base64的编码和解码。例如,`...
标题提到的"C# WinForm写的Base64加密解密工具"是一个基于C#语言和WinForm框架的实用程序,它允许用户对数据进行Base64编码和解码。WinForm是.NET Framework中的一个组件,用于创建传统的桌面应用程序,具有丰富的...
本文将深入探讨C#中的Base64编码和密钥加密技术,以及如何结合这两种方法增强数据安全性。 Base64是一种简单的编码方式,常用于将二进制数据转换为ASCII字符串,以便在网络传输或者存储时不会因为特殊字符引起问题...
本项目提供了四种常见的加密解密算法的Java实现:BASE64、AES、DES和MD5。接下来,我们将深入探讨这四种算法及其在Java中的应用。 首先,BASE64是一种编码方式,而非真正的加密算法。它将任意二进制数据转化为ASCII...
3. **基于Bouncy Castle的Base64加密与解密** Bouncy Castle是一个广泛使用的Java加密库,它提供了许多加密算法的支持,包括Base64编码。虽然通常不用于简单的Base64操作,但当需要与其他加密操作结合时,它是一个...
在WinForm开发中,结合这两者,可以创建一个简单的数据处理工具,如一个文件加密解密器,使用Base64编码将文件内容变为不可读,然后用MD5计算编码后的数据摘要,以确保数据的完整性和一致性。 在提供的"加密程序...
以下是关于 Base64 加密的详细介绍以及相关的密码学概念: 1. **Base64 加密**:Base64 不是一种加密技术,而是一种编码方法,它可以将任意的字节序列转化为特定的可打印字符序列。Java 中的实现可以使用 `java....
基于Python实现一个能够对凯撒密码、维吉尼亚密码、栅栏密码、摩斯密码、Base64编码、Ascii编码、AES、DES、RSA、RC4的加密解密以及密文破解维吉尼亚密钥和明文的CTF Crypto工具
在实现AES加密解密时,要特别注意错误处理和数据完整性检查。例如,确保文件读取和写入的正确性,以及在解密过程中处理可能的异常。此外,www.willvc.com.cn 提供的资源可能是进一步学习和解决问题的途径。 总之,...
这是一个基于 Tkinter 图形界面的 Base85编码和解码工具。用户可以通过该工具轻松输入字符串进行 Base85 编码或解码,支持简单直观的操作和友好的界面展示。 数据传输: 在某些情况下,需要将数据编码为 Base85 格式...
对称加密算法的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法。对称加密算法使用起来简单快捷,密钥较短,且破译困难。常见的对称加密算法包括 AES、DES...
《加密解密小玩具v0.6》是一款实用的加密解密软件,它集成了多种经典且常用的加密算法,如RSA、AES、BASE64、BASE32、RC4等,同时还提供了MD5和SHA系列的哈希加密功能。这款工具能够帮助用户快速对数据进行加密和...
需要注意的是,虽然3DES相比单一的DES提供了更强的安全性,但在现代密码学中,3DES已经被更先进的加密算法如AES(Advanced Encryption Standard)所取代,因为3DES的计算效率相对较低,且安全性已不再满足当前需求。...
为了使用这个"栅栏密码加密解密工具",你需要熟悉加密和解密的过程,以及可能遇到的挑战,如不均匀的文本长度和未知的栅栏数。通过实践和实验,你可以更好地掌握这种方法,并在需要时应用到实际的加密和解密任务中。...
需要注意的是,这里的加密过程实际上是一种简单的编码变换,并没有涉及到真正的密码学意义上的加密算法,因此其安全性较低。 #### 2.2 函数Fun_UnSecret 此函数实现了与Fun_Secret相对应的解密过程: - 首先,...