Base64是一种编码的算法,最初是为了解决电子邮件传输的问题
勉强可以认为它是一种加密算法,但是安全系数极低。因为不仅算法是公开的,连密钥也是公开的
算法是这样的:
1、对于一个给定的字符或字符串,先按照某种编码字符集(如UTF-8、GBK等)编码,得到二进制码
2、对二进制码做分组变化,从8个bit一组,改成6个bit一组,最后一组不足6个的,在低位补0
3、换算成十进制,找到Base64字符表中的字符(范围从0-63,一共64个字符,这也是Base64名字的由来)
4、若最后一组字符不足4个,则在末尾用"="补足4个字符
比如对于字符"A"
1、用UTF-8编码,得到01000001
2、分组变化,得到010000 010000
3、十进制是16 16,查Base64编码表,得到Q Q
4、由于字符不足4个,在末尾补上2个"=",最后得到"QQ=="
字符"A"用Base64编码以后,得到的就是"QQ=="。如果原来字节数是3的整数倍,那么Base64编码之后就会是4的整数倍,就不需要在末尾补"="了。但是一般没那么巧,所以Base64编码的一个明显的特点,就是末尾的字符经常是"="或者"=="
再来算下长度,"A"用UTF-8编码后,只占1个字节;Base64编码之后,则占4个字节,是原来的4倍。不过这是比较极端的情况,如果对"AAA"编码,则原来是3个字节,编码后4个字节,是原来的4/3倍。无论何时,
Base64编码后的字节数,都是4的整数倍
一般来说,经过Base64编码之后,都会比原来略大,这主要是因为分组变化,从8bit一组拆成了6bit一组的原因。至于最后补位的"=",一般可以忽略不计
注意,Base64是对字节进行编码,而不是直接对字符编码。所以同样的字符,首先用不同的编码字符集编码,最后得到的Base64编码也是不同的
Base64编码表的最后2个字符是"+"和"/",在URL里都是不能用的,所以后来又衍生出了URL Base64,把最后2个字符改成了"-"和"_"
JDK里也有Base64的实现,不过不推荐使用;一般用commons codec比较好
最后贴一段示例代码:
public static void main(String[] args) throws IOException {
String encoding = "UTF-8";
String name = "A";
byte[] originBytes = name.getBytes(encoding);
byte[] encodedBytes = Base64.encodeBase64(originBytes, false);
System.out.println(originBytes.length);
System.out.println(encodedBytes.length);
System.out.println(new String(encodedBytes, encoding));
}
更详细的内容,可以看一下《JAVA加密与解密的艺术》第5章,讲得更全面,只是稍微有些错误
分享到:
相关推荐
标题中的"pb9_base64_pb调用base64.dll_PB9base64_Base64.dll_glass8y6_pbbase64"涉及到的是PowerBuilder 9(简称PB9)中关于Base64编码的实现。Base64是一种用于在网络上传输二进制数据的编码方式,它将二进制数据...
在这个特定的场景中,我们关注的是如何在LabVIEW中处理图片,包括图片的缩放、Base64编码和解码。 1. **图片缩放**: 在LabVIEW中,你可以使用图像处理库来实现图片的缩放功能。这个库提供了各种图像操作函数,...
在“Base64.zip_labview base64”这个压缩包中,包含了一个名为“Base64.vi”的虚拟仪器(VI)。这个VI是用LabVIEW编写的,目的就是提供一个纯LabVIEW环境下的Base64编码解决方案。下面我们将详细探讨如何在LabVIEW...
Base64是一种在互联网上广泛使用的编码方式,它将任意二进制数据转换为可打印的ASCII字符,以便在网络传输中不受限制。这种编码方法基于一个64字符的字母数字表,包括大小写字母、数字以及"+"和"/",末尾可能带有...
在Excel中使用VBA(Visual Basic for Applications)解码BASE64编码的图片是一项常见的编程任务,特别是当你需要处理从网络或数据库中获取的BASE64格式的图像数据时。BASE64是一种用于将二进制数据转换为可打印ASCII...
Base64编码是一种常见的数据编码方式,主要用于在不支持二进制传输的环境中传递二进制数据。它将任意的二进制数据转化为ASCII字符序列,这样就可以在文本格式的邮件、网页源代码等场景中方便地使用。Base64编码会将3...
在Android开发中,有时我们需要将图片转换为Base64编码的形式以便在网络传输或者存储时使用。Base64编码是一种常见的二进制数据转化为文本的方法,它通过使用64个可打印字符来表示原本的二进制数据,使得数据可以在...
这个“VB JPG转base64和base64转JPG.rar”压缩包文件包含的可能是两个VB程序,分别用于将JPG图片编码为Base64字符串和将Base64字符串解码回JPG图片。 首先,让我们深入了解一下Base64编码的原理。Base64编码将每3个...
Base64编码和解码库,支持API调用和COM调用,输入参数支持VB的字节数组Byte(),输出支持VB的字节数组Byte()和...Public Declare Sub DecodeFromVBStringEx Lib "Base64" (ByRef Dest() As Byte, ByRef Src As String)
sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及Java源代码 sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及Java源代码 sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及...
在IT行业中,Base64是一种常见的数据编码方法,主要用于将二进制数据转换为ASCII字符串,以便在网络上传输或者存储。Base64Encoder和Base64Decoder是处理这种编码和解码过程的工具。本文将深入探讨这两个概念,以及...
Base64是一种在网络上传输和存储二进制数据时常用的数据编码方式,它将二进制数据转换为可打印的ASCII字符序列。在Java中,Base64编码主要用于处理包含二进制数据的字符串,例如图片、PDF文档或加密密钥等。Base64...
在Java中,`BASE64Encoder`和`BASE64Decoder`是两个核心类,分别用于对数据进行BASE64编码和解码。 `BASE64Encoder`类: 这个类在Java SDK中位于`javax.crypto`包下,主要负责将字节序列(byte array)转换为BASE...
在IT领域,Base64是一种广泛使用的编码方式,主要用于将二进制数据转换为可打印的ASCII字符,以便在网络上传输或存储。标题中的"BASE64Encoder.jar"表明这是一个Java应用程序,它提供了Base64编码的功能。描述中提到...
Base64是一种常见的数据编码方式,它将任意的二进制数据转换成可打印的ASCII字符串,以便在网络上传输或者存储。在JavaScript中,Base64编码和解码是经常用到的功能,尤其是在处理图像、JSON数据或者进行跨平台通信...
BASE64编码是一种常见的数据编码方式,特别是在网络通信和数据存储中广泛使用。它将任意二进制数据转换成可打印的ASCII字符序列,以便在不支持二进制传输的环境中进行传输。在这个"BASE64Encoder.zip"压缩包中包含了...
Java Base64是一个用于处理Base64编码的库,它为Java开发者提供了便捷的方式来编码和解码Base64数据。Base64是一种在网络上传输二进制数据时常用的编码方式,因为HTTP、电子邮件等协议主要处理ASCII字符,而Base64...
在IT领域,Base64是一种常见的数据编码方法,主要用于在不支持二进制传输的环境中传递数据,如电子邮件系统。C#是微软开发的一种面向对象的编程语言,广泛应用于Windows应用开发,包括WinForms应用程序。在C# ...