练涛

Base64编码学习

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

“我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。”
以上片段:
作者:郭无心
链接:https://www.zhihu.com/question/36306744/answer/71626823
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

实现原理:自行百度百科。


以下是3种实现base64编码的代码方式:

  • jdk
  • Commons Codec
  • Bouncy Castle
    测试代码以及自行娱乐代码:
package base64Test;

import java.io.IOException;

import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.util.encoders.Base64Encoder;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
*author:https://blog.csdn.net/qq_32953185
*time:2018-4-4
*/
public class Base64Test {

    private static String src = "base64 test";

    public static void main(String[] args) {
        jdkBase64();
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>");
        commonsCodesBase64();
        bouncyCastleBase64();
        System.out.println("----------------------");
        String x=Base64_repeat("base64 test",6);    //加密多次
        System.out.println(x);
        System.out.println(Base64_repeat_break(x,6)); //解密多次
    }

    //定义一个静态的Base64加密方法
    public static String Base64_jiami(String s){
        String result = null;
        BASE64Encoder encoder = new BASE64Encoder();
        result=encoder.encode(s.getBytes());
        return result;
    }

    //定义一个静态的可自行定义加密次数的、重复Base64加密的方法
    public static String Base64_repeat(String s,int x){
        String result = s;
        BASE64Encoder encoder = new BASE64Encoder();
        for(int i=0;i<x;i++){
            result=encoder.encode(result.getBytes());
        }
        return result;
    }
    //定义一个静态的可自行定义解密次数的、重复Base64解密的方法
    public static String Base64_repeat_break(String s,int x){
        String result = s;
        try {
            BASE64Decoder decoder = new BASE64Decoder();
            for(int i=0;i<x;i++){
                result=new String(decoder.decodeBuffer(result));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * jdk API方式
     */
    public static void jdkBase64(){
        try {
            BASE64Encoder encoder = new BASE64Encoder();
            String encode=encoder.encode(src.getBytes());
            //试试加密2次。。。
            String encode2=encoder.encode(encode.getBytes());
            System.out.println("encode:"+encode);
            System.out.println("加密两次的结果:"+encode2);

            BASE64Decoder decoder = new BASE64Decoder();
            System.out.println("decode:"+ new String(decoder.decodeBuffer(encode)));
            //解密2次。。。
            String encode2_1=new String(decoder.decodeBuffer(encode2));
            System.out.println("第一次:"+encode2_1);
            System.out.println("解密两次的结果:"+ new String(decoder.decodeBuffer(encode2_1)));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Comons Codec方式  CC
     */
    public static void commonsCodesBase64(){
        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));

    }

    /**
     * Bouncy Castle方式  BC
     */
    public static void bouncyCastleBase64(){
        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));

    }
}
posted @ 2018-04-04 14:44  练涛  阅读(147)  评论(0编辑  收藏  举报