`

Base64

阅读更多
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章,讲得更全面,只是稍微有些错误
分享到:
评论
1 楼 kewen342757003 2013-08-08  
看起来可以肉体解密的样子。。。

相关推荐

    pb9_base64_pb调用base64.dll_PB9base64_Base64.dll_glass8y6_pbbase64

    标题中的"pb9_base64_pb调用base64.dll_PB9base64_Base64.dll_glass8y6_pbbase64"涉及到的是PowerBuilder 9(简称PB9)中关于Base64编码的实现。Base64是一种用于在网络上传输二进制数据的编码方式,它将二进制数据...

    labview 图片缩放 base64编码base64解码

    在这个特定的场景中,我们关注的是如何在LabVIEW中处理图片,包括图片的缩放、Base64编码和解码。 1. **图片缩放**: 在LabVIEW中,你可以使用图像处理库来实现图片的缩放功能。这个库提供了各种图像操作函数,...

    Base64.zip_labview base64

    在“Base64.zip_labview base64”这个压缩包中,包含了一个名为“Base64.vi”的虚拟仪器(VI)。这个VI是用LabVIEW编写的,目的就是提供一个纯LabVIEW环境下的Base64编码解决方案。下面我们将详细探讨如何在LabVIEW...

    base64 加解码 base64转hex Base64转图片 图片转Base64工具,比网上其它的方便好用,支持大于1M内容

    Base64是一种在互联网上广泛使用的编码方式,它将任意二进制数据转换为可打印的ASCII字符,以便在网络传输中不受限制。这种编码方法基于一个64字符的字母数字表,包括大小写字母、数字以及"+"和"/",末尾可能带有...

    Base64转二进制文件,Base64 To File

    Base64编码是一种常见的数据编码方式,主要用于在不支持二进制传输的环境中传递二进制数据。它将任意的二进制数据转化为ASCII字符序列,这样就可以在文本格式的邮件、网页源代码等场景中方便地使用。Base64编码会将3...

    BASE64图片解码_解码_vba图片base64_base64_VBa_图片_

    在Excel中使用VBA(Visual Basic for Applications)解码BASE64编码的图片是一项常见的编程任务,特别是当你需要处理从网络或数据库中获取的BASE64格式的图像数据时。BASE64是一种用于将二进制数据转换为可打印ASCII...

    Android图片的Base64编码与解码及解码Base64图片方法

    在Android开发中,有时我们需要将图片转换为Base64编码的形式以便在网络传输或者存储时使用。Base64编码是一种常见的二进制数据转化为文本的方法,它通过使用64个可打印字符来表示原本的二进制数据,使得数据可以在...

    VB JPG转base64和base64转JPG.rar

    这个“VB JPG转base64和base64转JPG.rar”压缩包文件包含的可能是两个VB程序,分别用于将JPG图片编码为Base64字符串和将Base64字符串解码回JPG图片。 首先,让我们深入了解一下Base64编码的原理。Base64编码将每3个...

    Base64.dll(Base64编解码,附VB示例)

    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包 以及Java源代码 sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及...

    BASE64Encoder及BASE64Decoder的源码

    在IT行业中,Base64是一种常见的数据编码方法,主要用于将二进制数据转换为ASCII字符串,以便在网络上传输或者存储。Base64Encoder和Base64Decoder是处理这种编码和解码过程的工具。本文将深入探讨这两个概念,以及...

    Base64引入包

    Base64是一种在网络上传输和存储二进制数据时常用的数据编码方式,它将二进制数据转换为可打印的ASCII字符序列。在Java中,Base64编码主要用于处理包含二进制数据的字符串,例如图片、PDF文档或加密密钥等。Base64...

    BASE64Encoder 与 BASE64Decoder 源代码

    在Java中,`BASE64Encoder`和`BASE64Decoder`是两个核心类,分别用于对数据进行BASE64编码和解码。 `BASE64Encoder`类: 这个类在Java SDK中位于`javax.crypto`包下,主要负责将字节序列(byte array)转换为BASE...

    BASE64Encoder.jar

    在IT领域,Base64是一种广泛使用的编码方式,主要用于将二进制数据转换为可打印的ASCII字符,以便在网络上传输或存储。标题中的"BASE64Encoder.jar"表明这是一个Java应用程序,它提供了Base64编码的功能。描述中提到...

    Base64 编码和解码

    Base64是一种常见的数据编码方式,它将任意的二进制数据转换成可打印的ASCII字符串,以便在网络上传输或者存储。在JavaScript中,Base64编码和解码是经常用到的功能,尤其是在处理图像、JSON数据或者进行跨平台通信...

    BASE64Encoder.zip

    BASE64编码是一种常见的数据编码方式,特别是在网络通信和数据存储中广泛使用。它将任意二进制数据转换成可打印的ASCII字符序列,以便在不支持二进制传输的环境中进行传输。在这个"BASE64Encoder.zip"压缩包中包含了...

    java base64的jar包

    Java Base64是一个用于处理Base64编码的库,它为Java开发者提供了便捷的方式来编码和解码Base64数据。Base64是一种在网络上传输二进制数据时常用的编码方式,因为HTTP、电子邮件等协议主要处理ASCII字符,而Base64...

    C# Base64加密解密

    在IT领域,Base64是一种常见的数据编码方法,主要用于在不支持二进制传输的环境中传递数据,如电子邮件系统。C#是微软开发的一种面向对象的编程语言,广泛应用于Windows应用开发,包括WinForms应用程序。在C# ...

Global site tag (gtag.js) - Google Analytics