`

String转Base64编码的实现

阅读更多
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

比如某一字符串转成字节码为:
11011001 01101010 00101100
110110010110101000101100
00110110 00010110 00101000 00101100

把8位的字节连成一串110110010110101000101100
然后每次顺序选6个出来之后再把这6二进制数前面再添加两个0,就成了一个新的字节。之后再选出6个来,再添加0,依此类推,直到24个二进制数全部被选完。

当代码量不是3的整数倍时,代码量/3的余数自然就是2或者1。转换的时候,结果不够6位的在后面用0来补上相应的位置,之后再在6位的前面补两个0。转换完空出的结果就用就用“=”来补位。
如果余1,就补“==”
如果余2,就补“=”

下面是具体的代码实现:

import sun.misc.BASE64Decoder;

public class Base64Test {

	private final static String CODE_STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	private final static int ORGINAL_LEN = 8;
	private final static int NEW_LEN = 6;
	
	public static void main(String[] args){		
		System.out.println(encodeBase64("honda418"));
		System.out.println(getBASE64("honda418"));		
	}
	
	/**
	 * 把str转换成Base64编码
	 * @param str
	 * @return
	 */
	public static String encodeBase64(String str){
		String binStr = getBinStr(str);
		
		int oldByteLen = binStr.length() / ORGINAL_LEN; 	//原始字节数,数字字母占1个,中文占2个
		int newByteLen = oldByteLen * 4 / 3;	//新的字节数
		
		String appendStr = "";					//最后面该不该加“=”
		
		switch(oldByteLen % 3){
		case 0 : break;
		case 1 : newByteLen = newByteLen + 1; appendStr = "=="; break;
		case 2 : newByteLen = newByteLen + 1; appendStr = "="; break;
		}
		
		StringBuilder base64Str = new StringBuilder("");
		for(int k = 0; k < newByteLen; k++){
			String bin = "";
			// 二进制字符串按照6个一组分隔
			if((k+1) * NEW_LEN > binStr.length()){
				bin = binStr.substring(k * NEW_LEN, binStr.length());
			}else{
				bin = binStr.substring(k * NEW_LEN, (k+1) * NEW_LEN);	
			}
			
			int intval = Integer.parseInt(bin, 2);	//二进制转成十进制
			if(bin.length() < NEW_LEN){
				/**
				 * 不足6位时右侧补0
				 * 0101  -- > 010100 (补2个0)
				 * 10    -- > 100000 (补4个0)
				 */
				intval <<= NEW_LEN - bin.length();
			}
			//从码表里面查找当前字符,返回字符在码表中的位置
			base64Str = base64Str.append(CODE_STR.charAt(intval));
		}
		base64Str = base64Str.append(appendStr);
		return base64Str.toString();
	}
	
	/**
	 * 把字符串转行成二进制,再把二进制拼接起来
	 * 返回拼接后的二进制字符串
	 * @param str
	 * @return
	 */
	public static String getBinStr(String str){
		// 采用默认语言环境的 character set。
		byte[] b = str.getBytes();
		StringBuilder sb = new StringBuilder("");
		for(byte c : b){
			String tmpStr = Integer.toBinaryString(c);
			System.out.println(tmpStr);
			if(tmpStr.length() > ORGINAL_LEN){
				//截取, 如: "1111111111111111111111111010101" to "11010101"
				sb.append(tmpStr.substring(tmpStr.length() - ORGINAL_LEN, tmpStr.length()));
			}else if(tmpStr.length() < ORGINAL_LEN){
				//前补0, 如: "110011" to "00110011"
				int i = 0;
				while(tmpStr.length() + i < ORGINAL_LEN){
					i ++;
					sb.append("0");
				}
				sb.append(tmpStr);
			}else{
				sb.append(tmpStr);
			}
		}
		return sb.toString();
	}
	
	
	// 用SUN自带的进行BASE 64编码
	public static String getBASE64(String s) {
		if (s == null)
			return null;
		return (new sun.misc.BASE64Encoder()).encode(s.getBytes());
	}

	// 将 BASE64 编码的字符串 s 进行解码
	public static String getFromBASE64(String s) {
		if (s == null)
			return null;
		BASE64Decoder decoder = new BASE64Decoder();
		try {
			byte[] b = decoder.decodeBuffer(s);
			return new String(b);
		} catch (Exception e) {
			return null;
		}
	}
}

字符集编码采用默认语言环境的编码方式
最下面的2个方法是sun自带的编码解码方法。
分享到:
评论

相关推荐

    HexString和Base64String的相互转换

    2. **Base64String转HexString**:这个过程首先对Base64字符串进行解码,还原成原始的二进制数据,然后再将这些二进制数据每字节拆分成两个十六进制字符,从而得到HexString。 在提供的`DataConvert.sln`和`...

    android用base64实现文件与string相互转换

    本篇文章将详细介绍如何在Android中使用Base64来实现文件与String之间的相互转换。 一、Base64编码原理 Base64是一种基于64个字符的编码方法,这些字符包括大小写字母、数字以及"+"和"/",还有一个用于填充的字符"=...

    javascript/微信小程序中将String进行Base64编码并UTF-8格式输出

    提供一种Base64编码,并输出UTF-8格式的BASE64编码方式。本程序在微信小程序开发工具中已经测试通过。 Base64代码: [javascript] view plain copy print? (function(){ var BASE64_MAPPING = [ 'A','B','C','D',...

    labview 图片缩放 base64编码base64解码

    在LabVIEW中,可以使用字符串函数来实现Base64编码。首先,你需要将图像数据转换为字节串,然后使用Base64编码函数将字节串转换为可读的字符串。这样,图片数据就可以以文本形式在网络上传输,或保存在文本文件中。 ...

    C# 文件转换base64

    3. 应用Base64编码:使用`System.Convert.ToBase64String()`方法将二进制数据转换为Base64字符串。 ```csharp string base64String = Convert.ToBase64String(fileBytes); ``` 4. 关闭资源:确保在完成操作后关闭`...

    将图片进行Base64编码后传输

    在IT行业中,图片的传输是常见的操作,...例如,开发者可能使用在线Base64编码工具来快速转换图片,或者在代码编辑器中实现这个功能。总之,Base64编码是IT领域中一种实用的技巧,它简化了二进制数据在网络中的传输。

    VC++6.0使用base64编解码转图片

    在本项目"VC++6.0使用base64编解码转图片"中,我们将探讨如何在Visual C++ 6.0环境下实现Base64编码和解码,并将其应用于图片处理。 首先,Base64编码的基本原理是将每3个8位字节(24位)的数据转换为4个6位字节...

    图片在线转Base64编码 v1.0.rar

    根据上下文,这个文件很可能是实现图片转Base64功能的PHP源代码,用户可以通过运行或修改这个脚本来实现图片的Base64编码。 【详细知识点】 1. **Base64编码**: Base64是一种编码方法,将二进制数据转化为可打印的...

    Base64编码转换工具

    在标题提到的“Base64编码转换工具”中,我们主要讨论的是一个用C#语言开发的小型应用程序,该程序能够方便地实现Base64编码与普通文本之间的相互转换。 Base64编码的基本原理是将每3个字节(24位)的数据分成4组,...

    易语言API实现BASE64编码

    需要注意的是,虽然`CryptBinaryToString`函数可以方便地实现BASE64编码,但在某些情况下,如需要跨平台或者高性能编码,可能需要自己实现BASE64编码算法。易语言提供了丰富的编程结构和函数,开发者可以根据需求...

    Delphi版的Base64互相转换函数

    // 假设Base64String是已编码的Base64字符串 Bytes := TNetEncoding.Base64.DecodeStringToBytes(Base64String); end; ``` 除了使用`System.NetEncoding`单元,你还可以找到一些开源库或者自定义实现Base64转换...

    c#中 base64字符串与普通字符串互转

    总结,C#中的Base64字符串与普通字符串互转是通过`System.Convert`类提供的`ToBase64String`和`FromBase64String`方法实现的。在进行转换时,需要确保对字符串的编码有准确的理解,以便正确地转换和还原。在实际应用...

    c++图片与base64互转

    - 编码完成后,将Base64字符串存储到一个`std::string`对象中。 2. **从Base64到图片**: - 解码Base64字符串得到原始的二进制数据,同样可以使用第三方库或自定义函数完成。 - 将解码后的二进制数据转换回`cv::...

    .NET 中实现 Base64 编码

    在.NET中,实现Base64编码通常使用System.Text.Encoding类的GetBytes()和GetString()方法配合Convert类的ToBase64String()和FromBase64String()方法。例如,要对一个字符串进行Base64编码,可以这样做: ```csharp ...

    java和js相互base64编码解码

    下面将详细阐述这两个编程语言中实现Base64编码和解码的方法。 首先,让我们关注Java。在Java 8及更高版本中,已经内置了`java.util.Base64`类来支持Base64编码和解码。例如,在`Base64EnOut.java`文件中,可能会...

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

    在Android中,我们可以使用`Base64`类来实现图片的编码: ```java public void encodeImage(Bitmap bitmap) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap....

    JAVA将图片转换为Base64编码

    下面我们将详细介绍如何使用Java实现图片到Base64编码的转换。 为什么需要Base64编码 在网络传输和数据存储中,图片是一种二进制数据,它们可能会包含一些特殊字符,导致数据传输和存储出现问题。Base64编码可以将...

    Base64编码jar包

    `javabase64-1.3.1.jar`可能提供了这种编码方式,具体实现取决于库的API。 注意,虽然这里介绍的是`javabase64-1.3.1.jar`库,但Java 8及更高版本已经内置了`java.util.Base64`类,提供了一套标准的Base64编码和...

    二维码生成 图片Base64编码解码

    System.out.println("Base64编码: " + base64String); } } ``` 这段代码中,我们首先创建一个`QRCode`对象,添加数据,然后调用`make()`方法生成二维码,接着将其转换为图像并保存到本地,或者使用Base64编码。 ...

    BASE64编码方法

    在Delphi编程环境中,实现BASE64编码和解码通常涉及到使用内置的TIdEncoderMIME类或者第三方库。以下是对Delphi中BASE64编码和解码的基本步骤的详细解释: 1. **编码过程**: - 首先,原始二进制数据按3个字节一组...

Global site tag (gtag.js) - Google Analytics