Java 实现 Base64 加密解密

关于Base64的简介,我就不多说了,直接访问以下链接:
http://baike.baidu.com/link?url=-MyL_H_7nBjevmB6pxefFXTOomVM4W4yM6S2Iz5lMxs7Lmpec4ZJ9mP2h5EKqO8BjBf5ODmDvIGKIeaNPp5zWK

代码如下:

import java.util.HashMap;
import java.util.Map;

public class Base64 {
    public static String encoding(String src){
        StringBuilder result = new StringBuilder();
        byte[] tmp = src.getBytes();
        for (int i = 0; i < tmp.length; i+=3) {
            int tmpSrc = 0;
            for (int j = i; j < i+3; j++) {
                tmpSrc = tmpSrc<<8;
                if(j<tmp.length){
                    tmpSrc=tmpSrc|tmp[j];
                }
            }
            result.append(subEncoding(tmpSrc));
        }
        if(tmp.length%3==2){
            result.setCharAt(result.length()-1, '=');
        }else{
            if(tmp.length%3==1){
                result.setCharAt(result.length()-1, '=');
                result.setCharAt(result.length()-2, '=');
            }
        }
        return result.toString();
    }
    public static String subEncoding(int aim){
        int mode = 63;//111111
        int tmp = 0;
        String result="";
        for (int i = 0; i < 4; i++) {
            tmp = aim&(mode<<((3-i)*6));
            tmp = tmp>>((3-i)*6);
            result+=map(tmp);
        }
        return result;
    }
    public static char map(int i){
        if(i<26){
            return (char) ('A'+i);
        }
        if(i<52){
            return (char) ('a'+i-26);
        }
        if(i<62){
            return (char) ('0'+i-52);
        }
        switch(i){
        case 62 :return '+';
        case 63 :return '/';
        default :return '.';
        }

    }
    static Map<Character,Integer> map = new HashMap<>();
    static{
        for (int i = 0; i < 26; i++) {
            map.put((char) ('A'+i), i);
        }
        for (int i = 26; i < 52; i++) {
            map.put((char) ('a'+i-26), i);
        }
        for (int i = 52; i < 62; i++) {
            map.put((char) ('0'+i-52), i);
        }
        map.put('+', 62);
        map.put('/', 63);
    }
    public static String decoding(String src){
        StringBuilder result = new StringBuilder();
        char[] arr = src.toCharArray();
        for (int i = 0; i < arr.length; i+=4) {
            int middle = 0;
            for (int j = i; j < i+4; j++) {
                if(arr[j]=='='){
                    middle=(middle<<6);
                }else{
                    middle=(middle<<6)|map.get(arr[j]);
                }
            }
            result.append(subDecoding(middle));
        }
        return result.toString();
    }
    public static String subDecoding(int aim){
        String result = "";
        int mode = 255;
        for (int i = 0; i < 3; i++) {
            int tmp = aim&(mode<<((2-i)*8));
            tmp = tmp>>((2-i)*8);
            result+=(char)(tmp);
        }
        return result;
    }
    public static void main(String[] args) {
        String result = encoding("M");
        System.out.println(result);
        System.out.println(encoding("leasure."));
        System.out.println(encoding("easure."));
        System.out.println(encoding("asure."));
        System.out.println(encoding("sure."));
        System.out.println("_______");
        System.out.println(decoding("YXN1cmUu"));
        System.out.println(decoding("c3VyZS4="));
        System.out.println(decoding("ZWFzdXJlLg=="));
        System.out.println(decoding("TQ=="));
        String src ="VGhlIHRlcm0gQmFzZTY0IHJlZmVycyB0byBhIHNwZWNpZmljIE1JTUUgY29udGVudCB0cmFuc2Zl"+
                "ciBlbmNvZGluZy4gSXQgaXMgYWxzbyB1c2VkIGFzIGEgZ2VuZXJpYyB0ZXJtIGZvciBhbnkgc2lt"+
                "aWxhciBlbmNvZGluZyBzY2hlbWUgdGhhdCBlbmNvZGVzIGJpbmFyeSBkYXRhIGJ5IHRyZWF0aW5n"+
                "IGl0IG51bWVyaWNhbGx5IGFuZCB0cmFuc2xhdGluZyBpdCBpbnRvIGEgYmFzZSA2NCByZXByZXNl"+
                "bnRhdGlvbi4gVGhlIHBhcnRpY3VsYXIgY2hvaWNlIG9mIGJhc2UgaXMgZHVlIHRvIHRoZSBoaXN0"+
                "b3J5IG9mIGNoYXJhY3RlciBzZXQgZW5jb2Rpbmc6IG9uZSBjYW4gY2hvb3NlIGEgc2V0IG9mIDY0"+
                "IGNoYXJhY3RlcnMgdGhhdCBpcyBib3RoIHBhcnQgb2YgdGhlIHN1YnNldCBjb21tb24gdG8gbW9z"+
                "dCBlbmNvZGluZ3MsIGFuZCBhbHNvIHByaW50YWJsZS4gVGhpcyBjb21iaW5hdGlvbiBsZWF2ZXMg"+
                "dGhlIGRhdGEgdW5saWtlbHkgdG8gYmUgbW9kaWZpZWQgaW4gdHJhbnNpdCB0aHJvdWdoIHN5c3Rl"+
                "bXMsIHN1Y2ggYXMgZW1haWwsIHdoaWNoIHdlcmUgdHJhZGl0aW9uYWxseSBub3QgOC1iaXQgY2xl"+
                "YW4uDQpUaGUgcHJlY2lzZSBjaG9pY2Ugb2YgY2hhcmFjdGVycyBpcyBkaWZmaWN1bHQuIFRoZSBl"+
                "YXJsaWVzdCBpbnN0YW5jZXMgb2YgdGhpcyB0eXBlIG9mIGVuY29kaW5nIHdlcmUgY3JlYXRlZCBm"+
                "b3IgZGlhbHVwIGNvbW11bmljYXRpb24gYmV0d2VlbiBzeXN0ZW1zIHJ1bm5pbmcgdGhlIHNhbWUg"+
                "T1MgLSBlLmcuIFV1ZW5jb2RlIGZvciBVTklYLCBCaW5IZXggZm9yIHRoZSBUUlMtODAgKGxhdGVy"+
                "IGFkYXB0ZWQgZm9yIHRoZSBNYWNpbnRvc2gpIC0gYW5kIGNvdWxkIHRoZXJlZm9yZSBtYWtlIG1v"+
                "cmUgYXNzdW1wdGlvbnMgYWJvdXQgd2hhdCBjaGFyYWN0ZXJzIHdlcmUgc2FmZSB0byB1c2UuIEZv"+
                "ciBpbnN0YW5jZSwgVXVlbmNvZGUgdXNlcyB1cHBlcmNhc2UgbGV0dGVycywgZGlnaXRzLCBhbmQg"+
                "bWFueSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLCBidXQgbm8gbG93ZXJjYXNlLCBzaW5jZSBVTklY"+
                "IHdhcyBzb21ldGltZXMgdXNlZCB3aXRoIHRlcm1pbmFscyB0aGF0IGRpZCBub3Qgc3VwcG9ydCBk"+
                "aXN0aW5jdCBsZXR0ZXIgY2FzZS4gVW5mb3J0dW5hdGVseSBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3"+
                "aXRoIG5vbi1VTklYIHN5c3RlbXMsIHNvbWUgb2YgdGhlIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMg"+
                "ZG8gbm90IGV4aXN0IGluIG90aGVyIHRyYWRpdGlvbmFsIGNoYXJhY3RlciBzZXRzLiBUaGUgTUlN"+
                "RSBCYXNlNjQgZW5jb2RpbmcgcmVwbGFjZXMgbW9zdCBvZiB0aGUgcHVuY3R1YXRpb24gY2hhcmFj"+
                "dGVycyB3aXRoIHRoZSBsb3dlcmNhc2UgbGV0dGVycywgYSByZWFzb25hYmxlIHJlcXVpcmVtZW50"+
                "IGJ5IHRoZSB0aW1lIGl0IHdhcyBkZXNpZ25lZC4=";
        System.out.println(decoding(src));


    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值