java基础---->Base64算法的使用
2017-05-11 14:13
519 查看
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。详细的Base64信息,可以参见维基百科:https://en.wikipedia.org/wiki/Base64。今天,我们开始java中base64算法的使用。
结构导航
Java自带的Base64算法
commons-codec的Base64算法
bouncycastle的Base64算法
自定义的base64算法
友情链接
一、 引入jdk自带的rt.jar包
要使用Base64Encoder,却发现在Eclipse中无法找到该类,原来Base64Encoder并不属于JDK标准库范畴,但是又包含在了JDK中。
问题的解决方案: Project->Properties,选择Java Build Path设置项,再选择Libraries标签,Add External Jars添加%JAVA_HOME%\jre\lib\rt.jar就行。
二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。
三、 运行结果如下:
commons-codec-1.10.jar地址:https://www.bouncycastle.org/latest_releases.html
二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。
三、 运行结果如下:
bcprov-jdk15on-154.jar地址: https://commons.apache.org/proper/commons-codec/download_codec.cgi
二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。
三、 运行结果如下:
二、 运行结果如下:
原文地址:http://www.cnblogs.com/huhx/p/javaBase64.html#jdk_base64
结构导航
Java自带的Base64算法
commons-codec的Base64算法
bouncycastle的Base64算法
自定义的base64算法
友情链接
Java自带的Base64算法
项目结构如下一、 引入jdk自带的rt.jar包
要使用Base64Encoder,却发现在Eclipse中无法找到该类,原来Base64Encoder并不属于JDK标准库范畴,但是又包含在了JDK中。
问题的解决方案: Project->Properties,选择Java Build Path设置项,再选择Libraries标签,Add External Jars添加%JAVA_HOME%\jre\lib\rt.jar就行。
二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。
private static String src = "my name is huhx"; @Test public void huhxBase64() { try { BASE64Encoder encoder = new BASE64Encoder(); String encode = encoder.encode(src.getBytes()); System.out.println("encode: " + encode); BASE64Decoder decoder = new BASE64Decoder(); String decode = new String(decoder.decodeBuffer(encode)); System.out.println("decode: " + decode); } catch (IOException e) { e.printStackTrace(); } }
三、 运行结果如下:
encode: bXkgbmFtZSBpcyBodWh4 decode: my name is huhx
commons-codec的Base64算法
一、 引入commons-codec-1.10.jar包,提供对base64算法的支持commons-codec-1.10.jar地址:https://www.bouncycastle.org/latest_releases.html
二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。
@Test public void commonCodeBase64() { byte[] encodeBytes = Base64.encodeBase64(src.getBytes()); System.out.println("encode: " + new String(encodeBytes)); byte[] decodeBytes = Base64.decodeBase64(encodeBytes); System.out.println("decode: " + new String(decodeBytes)); }
三、 运行结果如下:
encode: bXkgbmFtZSBpcyBodWh4 decode: my name is huhx
bcprov的Base64算法
一、 引入bcprov-jdk15on-154.jar,提供对base64算法的支持bcprov-jdk15on-154.jar地址: https://commons.apache.org/proper/commons-codec/download_codec.cgi
二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。
@Test public void bouncyCodeBase64() { byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes()); System.out.println("encode: " + new String(encodeBytes)); byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes); System.out.println("decode: " + new String(decodeBytes)); }
三、 运行结果如下:
encode: bXkgbmFtZSBpcyBodWh4 decode: my name is huhx
自定义的base64算法
一、 HuhxBase64.java的自定义算法,内容如下:package com.huhx.base64.jdk; /** * writer: huhx */ public class HuhxBase64 { private static final String CODES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // base64解密 private static byte[] base64Decode(String input) { if (input.length() % 4 != 0) { throw new IllegalArgumentException("Invalid base64 input"); } byte decoded[] = new byte[((input.length() * 3) / 4) - (input.indexOf('=') > 0 ? (input.length() - input.indexOf('=')) : 0)]; char[] inChars = input.toCharArray(); int j = 0; int b[] = new int[4]; for (int i = 0; i < inChars.length; i += 4) { // This could be made faster (but more complicated) by precomputing // these index locations. b[0] = CODES.indexOf(inChars[i]); b[1] = CODES.indexOf(inChars[i + 1]); b[2] = CODES.indexOf(inChars[i + 2]); b[3] = CODES.indexOf(inChars[i + 3]); decoded[j++] = (byte) ((b[0] << 2) | (b[1] >> 4)); if (b[2] < 64) { decoded[j++] = (byte) ((b[1] << 4) | (b[2] >> 2)); if (b[3] < 64) { decoded[j++] = (byte) ((b[2] << 6) | b[3]); } } } return decoded; } // base64加密 private static String base64Encode(byte[] in) { StringBuilder out = new StringBuilder((in.length * 4) / 3); int b; for (int i = 0; i < in.length; i += 3) { b = (in[i] & 0xFC) >> 2; out.append(CODES.charAt(b)); b = (in[i] & 0x03) << 4; if (i + 1 < in.length) { b |= (in[i + 1] & 0xF0) >> 4; out.append(CODES.charAt(b)); b = (in[i + 1] & 0x0F) << 2; if (i + 2 < in.length) { b |= (in[i + 2] & 0xC0) >> 6; out.append(CODES.charAt(b)); b = in[i + 2] & 0x3F; out.append(CODES.charAt(b)); } else { out.append(CODES.charAt(b)); out.append('='); } } else { out.append(CODES.charAt(b)); out.append("=="); } } return out.toString(); } public static void main(String[] args) { String input = "I love you, huhx!"; String encode = base64Encode(input.getBytes()); System.out.println("encode: " + encode); String decode = new String(base64Decode(encode)); System.out.println("decode: " + decode); } }
二、 运行结果如下:
encode: SSBsb3ZlIHlvdSwgaHVoeCE= decode: I love you, huhx!
友情链接
base64算法的测试代码: http://pan.baidu.com/s/1eSueem2原文地址:http://www.cnblogs.com/huhx/p/javaBase64.html#jdk_base64
相关文章推荐
- java基础---->Base64算法的使用
- java基础---->Base64算法的使用
- java基础---->java中Properties的使用
- java基础---->java中nio的使用(一)
- java基础---->Runtime类的使用(一)
- Java基础--->09.关于JDK使用旧方法编译出错、警告问题。
- <黑马程序员>java基础加强--eclipse的使用
- java基础---->Java中枚举的使用(一)
- java基础---->java注解的使用(一)
- java基础---->Zip压缩的使用(转)
- java基础---->Reference的使用(一)
- Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)
- java基础---->string字面量的使用
- java基础---->Java关于复制的使用(一)
- java基础---->数组的基础使用(一)
- java基础---->java多线程的使用(十)
- java基础---->git的使用(一)
- java基础---->Java中异常的使用(二)
- Java基础之集合框架——使用堆栈Stack<>对象模拟发牌(TryDeal)