博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Base64算法的使用
阅读量:6082 次
发布时间:2019-06-20

本文共 4653 字,大约阅读时间需要 15 分钟。

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。详细的Base64信息,可以参见维基百科:。今天,我们开始java中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";@Testpublic 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: bXkgbmFtZSBpcyBodWh4decode: my name is huhx

 

commons-codec的Base64算法

一、 引入commons-codec-1.10.jar包,提供对base64算法的支持

commons-codec-1.10.jar地址:

 

二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。

@Testpublic 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: bXkgbmFtZSBpcyBodWh4decode: my name is huhx

 

bcprov的Base64算法

一、 引入bcprov-jdk15on-154.jar,提供对base64算法的支持

bcprov-jdk15on-154.jar地址: 

 

二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。

@Testpublic 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: bXkgbmFtZSBpcyBodWh4decode: 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!

转载于:https://www.cnblogs.com/xlhan/p/7115556.html

你可能感兴趣的文章
Spring – 开发环境 – 手动配置
查看>>
!==和!=有什么区别(js php)
查看>>
python入门神图
查看>>
我的友情链接
查看>>
[一文一命令]ls命令详解
查看>>
EBS FORM 失效工具栏按钮
查看>>
com.sun.jdi.InvocationException occurred invoking method
查看>>
Windows Server 2008 R2 IIS7 搭建PHP环境
查看>>
任务计划
查看>>
交换机杂记
查看>>
shell编程总结
查看>>
我的友情链接
查看>>
Java内存与垃圾回收调优
查看>>
Java 8新特性:Stream API
查看>>
swing和java里嵌入浏览器
查看>>
android之SoundPool
查看>>
Python学习-反射相关函数
查看>>
ubuntu11.10安装五笔输入法
查看>>
我的友情链接
查看>>
解决zabbix_get 获取不到自定义key一例
查看>>