天天看點

Java base64編碼解碼工具類

下面貼出這個工具類的源代碼,供朋友們參考,本人新手寫得不好,請用力拍磚:

/************************base64util.java*****************************/

<a href="http://my.oschina.net/itblog/blog/204413#">?</a>

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

<code>package</code> <code>util;</code>

<code>import</code> <code>java.util.hashmap;</code>

<code>import</code> <code>java.util.map;</code>

<code>/**</code>

<code> </code><code>* this class is a tool class to convert base64 string and </code>

<code> </code><code>* normal string to each other. &lt;br&gt;&lt;br&gt;</code>

<code> </code><code>* more information about base64, please refer to: </code>

<code> </code><code>* http://zh.wikipedia.org/zh-cn/base64</code>

<code> </code><code>* @author user</code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>base64util {</code>

<code>  </code><code>private</code> <code>static</code> <code>final</code> <code>map&lt;integer, character&gt; base64charmap = </code><code>new</code> <code>hashmap&lt;&gt;();</code>

<code>  </code><code>private</code> <code>static</code> <code>final</code> <code>string base64charstring = </code>

<code>    </code><code>"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/"</code><code>;</code>

<code>  </code><code>static</code> <code>{</code>

<code>    </code><code>// initialize base64 map</code>

<code>    </code><code>for</code> <code>(</code><code>int</code> <code>i=</code><code>0</code><code>;i&lt;base64charstring.length();i++){</code>

<code>      </code><code>char</code> <code>c = base64charstring.charat(i);</code>

<code>      base64charmap.put(</code><code>new</code> <code>integer(i), </code><code>new</code> <code>character(c));</code>

<code>    }</code>

<code>  }</code>

<code>  </code><code>/**</code>

<code>   * this method is used to encode a normal string to base64 string</code>

<code>   * @param origin</code>

<code>   * the string to be encoded</code>

<code>   * @return</code>

<code>   * the string after encoded.</code>

<code>   */</code>

<code>  </code><code>public</code> <code>static</code> <code>string encode (string origin) {</code>

<code>    </code><code>if</code> <code>(origin == </code><code>null</code><code>) {</code>

<code>      </code><code>return</code> <code>null</code><code>;</code>

<code>    </code><code>if</code> <code>(origin.length() == </code><code>0</code><code>) {</code>

<code>      </code><code>return</code> <code>""</code><code>;</code>

<code>    </code><code>int</code> <code>length = origin.length();</code>

<code>    string binarystring = </code><code>""</code><code>;</code>

<code>    </code><code>// to binary string</code>

<code>    </code><code>for</code> <code>(</code><code>int</code> <code>i=</code><code>0</code><code>;i&lt;length;i++) {</code>

<code>      </code><code>int</code> <code>ascii = origin.charat(i);</code>

<code>      string binarycharstring = integer.tobinarystring(ascii);</code>

<code>      </code><code>while</code> <code>(binarycharstring.length() &lt; </code><code>8</code><code>) {</code>

<code>        binarycharstring = </code><code>"0"</code> <code>+ binarycharstring;</code>

<code>      }</code>

<code>      binarystring += binarycharstring;</code>

<code>    </code><code>// to base64 index</code>

<code>    </code><code>int</code> <code>beginindex = </code><code>0</code><code>;</code>

<code>    </code><code>int</code> <code>endindex = beginindex + </code><code>6</code><code>;</code>

<code>    string base64binarystring = </code><code>""</code><code>;</code>

<code>    string charstring = </code><code>""</code><code>;</code>

<code>    </code><code>while</code> <code>((base64binarystring = </code>

<code>      binarystring.substring(beginindex, endindex)).length() &gt; </code><code>0</code><code>) {</code>

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

<code>      </code><code>while</code> <code>(base64binarystring.length() &lt; </code><code>6</code><code>) {</code>

<code>        base64binarystring += </code><code>"0"</code><code>;</code>

<code>      </code><code>int</code> <code>index = integer.parseint(base64binarystring, </code><code>2</code><code>);</code>

<code>      </code><code>char</code> <code>base64char = base64charmap.get(index);</code>

<code>      charstring = charstring + base64char;</code>

<code>      beginindex += </code><code>6</code><code>;</code>

<code>      endindex += </code><code>6</code><code>;</code>

<code>      </code><code>if</code> <code>(endindex &gt;= binarystring.length()) {</code>

<code>        endindex = binarystring.length();</code>

<code>      </code><code>if</code> <code>(endindex &lt; beginindex) {</code>

<code>        </code><code>break</code><code>;</code>

<code>    </code><code>if</code> <code>(length % </code><code>3</code> <code>== </code><code>2</code><code>) {</code>

<code>      charstring += </code><code>"="</code><code>;</code>

<code>    </code><code>if</code> <code>(length % </code><code>3</code> <code>== </code><code>1</code><code>) {</code>

<code>      charstring += </code><code>"=="</code><code>;</code>

<code>    </code><code>return</code> <code>charstring;</code>

<code>   * this method is used to decode from base64 string to a normal string.</code>

<code>   * @param encodedstring</code>

<code>   * the string to be decoded.</code>

<code>   * the string after decoded.</code>

<code>  </code><code>public</code> <code>static</code> <code>string decode(string encodedstring) {</code>

<code>    </code><code>if</code> <code>(encodedstring == </code><code>null</code><code>) {</code>

<code>    </code><code>if</code> <code>(encodedstring.length() == </code><code>0</code><code>) {</code>

<code>    </code><code>//get origin base64 string</code>

<code>    string origin = encodedstring.substring(</code><code>0</code><code>,encodedstring.indexof(</code><code>"="</code><code>));</code>

<code>    string equals = encodedstring.substring(encodedstring.indexof(</code><code>"="</code><code>));</code>

<code>    </code><code>//convert base64 string to binary string</code>

<code>    </code><code>for</code> <code>(</code><code>int</code> <code>i=</code><code>0</code><code>;i&lt;origin.length();i++) {</code>

<code>      </code><code>char</code> <code>c = origin.charat(i);</code>

<code>      </code><code>int</code> <code>ascii = base64charstring.indexof(c);</code>

<code>      </code><code>while</code> <code>(binarycharstring.length() &lt; </code><code>6</code><code>) {</code>

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

<code>    </code><code>if</code> <code>(equals.length() == </code><code>1</code><code>) {</code>

<code>      binarystring = binarystring.substring(</code><code>0</code><code>,binarystring.length()-</code><code>2</code><code>);</code>

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

<code>    </code><code>if</code> <code>(equals.length() == </code><code>2</code><code>) {</code>

<code>      binarystring = binarystring.substring(</code><code>0</code><code>,binarystring.length()-</code><code>4</code><code>);</code>

<code>    </code><code>// convert to string</code>

<code>    string resultstring = </code><code>""</code><code>;</code>

<code>    </code><code>int</code> <code>endindex = beginindex + </code><code>8</code><code>;</code>

<code>    </code><code>while</code> <code>((charstring = </code>

<code>      binarystring.substring(beginindex, endindex)).length() == </code><code>8</code><code>) {</code>

<code>      </code><code>int</code> <code>ascii = integer.parseint(charstring, </code><code>2</code><code>);</code>

<code>      resultstring += (</code><code>char</code><code>)ascii;</code>

<code>      beginindex += </code><code>8</code><code>;</code>

<code>      endindex += </code><code>8</code><code>;</code>

<code>      </code><code>if</code> <code>(endindex &gt; binarystring.length()) {</code>

<code>    </code><code>return</code> <code>resultstring;</code>

<code>  </code><code>// test methods here.</code>

<code>  </code><code>public</code> <code>static</code> <code>void</code> <code>main(string[] args) {</code>

<code>    string originstring = </code>

<code>      </code><code>"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."</code><code>;</code>

<code>    string base64string = </code>

<code>      </code><code>"twfuiglzigrpc3rpbmd1axnozwqsig5vdcbvbmx5igj5ighpcybyzwfzb24sigj1dcbiesb0aglz"</code> <code>+</code>

<code>      </code><code>"ihnpbmd1bgfyihbhc3npb24gznjvbsbvdghlcibhbmltywxzlcb3agljacbpcybhigx1c3qgb2yg"</code> <code>+</code>

<code>      </code><code>"dghlig1pbmqsihroyxqgynkgysbwzxjzzxzlcmfuy2ugb2ygzgvsawdodcbpbib0agugy29udglu"</code> <code>+</code>

<code>      </code><code>"dwvkigfuzcbpbmrlzmf0awdhymxligdlbmvyyxrpb24gb2yga25vd2xlzgdllcblegnlzwrzihro"</code> <code>+</code>

<code>      </code><code>"zsbzag9ydcb2zwhlbwvuy2ugb2ygyw55ignhcm5hbcbwbgvhc3vyzs4="</code><code>; </code>

<code>    system.out.println(</code><code>"===============encode================="</code><code>);</code>

<code>    string result = encode(originstring);</code>

<code>    system.out.println(result);</code>

<code>    system.out.println(result.equals(base64string));</code>

<code>    system.out.println(</code><code>"===============decode================="</code><code>);</code>

<code>    string decodedstring = decode(base64string);</code>

<code>    system.out.println(decodedstring);</code>

<code>    system.out.println(originstring.equals(decodedstring));</code>

<code>    system.out.println(decode(encode(</code><code>"abcdefg"</code><code>)));</code>

<code>}</code>