java Base64算法的使用
Base64是常见的网络加密算法,Base64编码可用于在HTTP环境下传递较长的标识信息。详见 Base64介绍
1 自定义的base64算法
Base64Encrypt.java
public class Base64Encrypt { 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 = "we are a team."; String encode = base64Encode(input.getBytes()); System.out.println("encode: " + encode); String decode = new String(base64Decode(encode)); System.out.println("decode: " + decode); }
2 bcprov的Base64算法
引入bcprov-jdk15on-154.jar,提供对base64算法的支持
bcprov-jdk15on-154.jar地址: https://commons.apache.org/proper/commons-codec/download_codec.cgi
测试代码:
String input ="we are a team ."; byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(input.getBytes()); System.out.println("encode: " + new String(encodeBytes)); byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes); System.out.println("decode: " + new String(decodeBytes));
一个知识点,你自己看懂了,那是一个层次;你会用,是另外一个层次;你写出来,你写出来让别人懂,那又是更高的一个层次;你用最通俗的言语,把知识点讲出来,让别人一下子明白,又是更高的一个层次。
如果您觉的本篇文章有用,可以赞助作者一些小额的比特币,用来买咖啡,谢谢。 收款地址:3NTPbsJKRKhe1RE1g2rZdr2dFTDgkBUgUa
注:转载需注明出处及作者名,严禁恶意转载,尊重原作者的劳动成果。
如果您觉的本篇文章有用,可以赞助作者一些小额的比特币,用来买咖啡,谢谢。 收款地址:3NTPbsJKRKhe1RE1g2rZdr2dFTDgkBUgUa
注:转载需注明出处及作者名,严禁恶意转载,尊重原作者的劳动成果。