Java base64编码解码工具类

    前几天无意中看到Java中有Base64编码,不解的我去百科了一下,了解了Base64的基本使用和实现原理,于是在空暇时自己手动写了一个,这个类可以完成对字母数字的编码和解码工作,但是对于中文,还没有仔细研究其编码的实现过程。至于什么是Base64,用它来干什么,请移步到:http://zh.wikipedia.org/zh-cn/Base64 

下面贴出这个工具类的源代码,供朋友们参考,本人新手写得不好,请用力拍砖:

/************************Base64Util.java*****************************/

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

package util;

 

import java.util.HashMap;

import java.util.Map;

 

/**

 * This class is a tool class to convert Base64 string and 

 * normal string to each other. <br><br>

 * More information about base64, Please refer to: 

 * http://zh.wikipedia.org/zh-cn/Base64

 * @author user

 */

public class Base64Util {

  private static final Map<Integer, Character> base64CharMap = new HashMap<>();

  private static final String base64CharString = 

    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  static {

    // initialize base64 map

    for (int i=0;i<base64CharString.length();i++){

      char c = base64CharString.charAt(i);

      base64CharMap.put(new Integer(i), new Character(c));

    }

  }

 

  /**

   * This method is used to encode a normal string to base64 string

   * @param origin

   * The String to be encoded

   * @return

   * The String after encoded.

   */

  public static String encode (String origin) {

    if (origin == null) {

      return null;

    }

    if (origin.length() == 0) {

      return "";

    }

    int length = origin.length();

    String binaryString = "";

    // to binary String

    for (int i=0;i<length;i++) {

      int ascii = origin.charAt(i);

      String binaryCharString = Integer.toBinaryString(ascii);

      while (binaryCharString.length() < 8) {

        binaryCharString = "0" + binaryCharString;

      }

      binaryString += binaryCharString;

    }

 

    // to base64 index

    int beginIndex = 0;

    int endIndex = beginIndex + 6;

    String base64BinaryString = "";

    String charString = "";

    while ((base64BinaryString = 

      binaryString.substring(beginIndex, endIndex)).length() > 0) {

      //if length is less than 6, add "0".

      while (base64BinaryString.length() < 6) {

        base64BinaryString += "0";

      }

      int index = Integer.parseInt(base64BinaryString, 2);

      char base64Char = base64CharMap.get(index);

      charString = charString + base64Char;

      beginIndex += 6;

      endIndex += 6;

      if (endIndex >= binaryString.length()) {

        endIndex = binaryString.length();

      }

      if (endIndex < beginIndex) {

        break;

      }

    }

    if (length % 3 == 2) {

      charString += "=";

    }

    if (length % 3 == 1) {

      charString += "==";

    }

    return charString;

  }

 

  /**

   * This method is used to decode from base64 string to a normal string.

   * @param encodedString

   * The string to be decoded.

   * @return

   * The string after decoded.

   */

  public static String decode(String encodedString) {

    if (encodedString == null) {

      return null;

    }

    if (encodedString.length() == 0) {

      return "";

    }

    //get origin base64 String

    String origin = encodedString.substring(0,encodedString.indexOf("="));

    String equals = encodedString.substring(encodedString.indexOf("="));

 

    String binaryString = "";

    //convert base64 string to binary string

    for (int i=0;i<origin.length();i++) {

      char c = origin.charAt(i);

      int ascii = base64CharString.indexOf(c);

      String binaryCharString = Integer.toBinaryString(ascii);

      while (binaryCharString.length() < 6) {

        binaryCharString = "0" + binaryCharString;

      }

      binaryString += binaryCharString;

    }

    // the encoded string has 1 "=", means that the binary string has append 2 "0"

    if (equals.length() == 1) {

      binaryString = binaryString.substring(0,binaryString.length()-2);

    }

    // the encoded string has 2 "=", means that the binary string has append 4 "0"

    if (equals.length() == 2) {

      binaryString = binaryString.substring(0,binaryString.length()-4);

    }

 

    // convert to String

    String charString = "";

    String resultString = "";

    int beginIndex = 0;

    int endIndex = beginIndex + 8;

    while ((charString = 

      binaryString.substring(beginIndex, endIndex)).length() == 8) {

      int ascii = Integer.parseInt(charString, 2);

      resultString += (char)ascii;

      beginIndex += 8;

      endIndex += 8;

      if (endIndex > binaryString.length()) {

        break;

      }

    }

    return resultString;

  }

 

  // Test methods here.

  public static void main(String[] args) {

    String originString = 

      "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.";

    String base64String = 

      "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz" +

      "IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg" +

      "dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu" +

      "dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo" +

      "ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4="

 

    System.out.println("===============encode=================");

    String result = encode(originString);

    System.out.println(result);

    System.out.println(result.equals(base64String));

    System.out.println("===============decode=================");

    String decodedString = decode(base64String);

    System.out.println(decodedString);

    System.out.println(originString.equals(decodedString));

    System.out.println(decode(encode("abcdefg")));

  }

}

时间: 2024-12-31 00:55:44

Java base64编码解码工具类的相关文章

各种格式的编码解码工具类分享(hex解码 base64编码)_java

复制代码 代码如下: import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder; import org.apache.commons.codec.DecoderException;import org.apache.commons.codec.binary.Base64;import org.apache.commons.codec.binary.Hex;im

简洁实用的Java Base64编码加密异常处理类代码_java

本文所述为Java Base64加密.解密编码异常处理类,代码虽然很简短,但是可以有效避免在采用Base64加解密时候执行出错的问题,这里使用了com.gootrip.util包,并引入了java.io的所有方法. 具体功能代码如下: package com.gootrip.util; import java.io.*; public class Base64DecodingException extends IOException { private char c; public Base64

android Java BASE64编码和解码二:图片的编码和解码

1.准备工作  (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础     (2)添加 ImgHelper 工具类   package com.app21; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import android.graphics.Bitmap; import

Python base64编码解码实例

  这篇文章主要介绍了Python base64编码解码实例,本文直接给出实例代码,使用也很简单,需要的朋友可以参考下 Python中进行Base64编码和解码要用base64模块,代码示例: ? 1 2 3 4 5 6 7 #-*- coding: utf-8 -*- import base64   str = 'cnblogs' str64 = base64.b64encode(str) print str64 #Y25ibG9ncw== print base64.b64decode(str

Java基础之java处理ip的工具类_java

java处理ip的工具类,包括把long类型的Ip转为一般Ip类型.把xx.xx.xx.xx类型的转为long类型.根据掩码位获取掩码.根据 ip/掩码位 计算IP段的起始IP.根据 ip/掩码位 计算IP段的终止IP等方法,可以直接使用! 复制代码 代码如下: package com.hh.test; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; /**

redis-求 java Redis 连接池 工具类

问题描述 求 java Redis 连接池 工具类 谁有我一个 java Redis 连接池的工具类, 最好附上一些真删改查的小例子 解决方案 http://www.open-open.com/code/view/1430406110599 解决方案二: 最著名的就是jedis了 解决方案三: jedis自带连接池 JedisPoolConfig config = new JedisPoolConfig(); //控制一个pool可分配多少个jedis实例,通过pool.getResource(

java用ant.jar工具类执行sql脚本遇到问题

问题描述 java用ant.jar工具类执行sql脚本遇到问题 最近在研究用工具类ant.jar执行sql脚本文件,一般对数据和字段的操作都无问题,但当要执行生成触发器或者存储过程时却出错,有大神做过这方面的吗?或者用其他方法可以执行能生成存储过程和触发器的sql脚本?求解!新人无币,望见谅~ Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an

java实现的正则工具类_java

本文实例讲述了java实现的正则工具类.分享给大家供大家参考.具体如下: 这里实现的正则工具类适用于:正则电话号码.邮箱.QQ号码.QQ密码.手机号 java代码如下: package com.zhanggeng.contact.tools; /** * RegexTool is used to regex the string ,such as : phone , qq , password , email . * * @author ZHANGGeng * @version v1.0.1 *

用XMLDOM和ADODB.Stream实现base64编码解码实现代码_javascript技巧

复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title> 用 XMLDOM 和 ADODB.Stream 实现base64编码解码 </title> <meta http-equiv="Content-Type" content="text/html; cha