Base64(四)

/**
 * Created by y0n on 2017/4/21.
 */
public class JavaCrackMe04 {


    private static char[] key = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();


    public static char[] encode(byte[] var0) {
        char[] var1 = new char[(var0.length + 2) / 3 << 2];
        int var2 = 0;


        for(int var3 = 0; var2 < var0.length; var3 += 4) {
            boolean var4 = false;
            boolean var5 = false;
            int var6 = (var6 = 255 & var0[var2]) << 8;
            if(var2 + 1 < var0.length) {
                var6 |= 255 & var0[var2 + 1];
                var5 = true;
            }


            var6 <<= 8;
            if(var2 + 2 < var0.length) {
                var6 |= 255 & var0[var2 + 2];
                var4 = true;
            }


            var1[var3 + 3] = key[var4?var6 & 63:64];
            var6 >>= 6;
            var1[var3 + 2] = key[var5?var6 & 63:64];
            var6 >>= 6;
            var1[var3 + 1] = key[var6 & 63];
            var6 >>= 6;
            var1[var3] = key[var6 & 63];
            var2 += 3;
        }


        return var1;
    }


    public static char[] DeCode(byte[] cipherText) {
        char[] var1 = new char[(cipherText.length + 2) / 4 << 2];
        int var2 = 0;
        int []tempj = new int[20];
        for(int var3 = 0; var2 < cipherText.length; var3 += 3) {
            boolean var4 = false;
            boolean var5 = false;
            //boolean var7 = false;


            for (int i =0; i < cipherText.length; i++)
            {
                for (int j = 0; j < 64; j++)
                if (cipherText[i] == key[j])
                {
                    tempj[i] = j;
                    break;
                }
            }


            int var6 = (var6 = 63 & tempj[var2]) << 6;


            if(var2 + 1 < cipherText.length) {
                var6 |= 63 & tempj[var2 + 1];
                var5 = true;
            }


            var6 <<= 6;
            if(var2 + 2 < cipherText.length) {
                var6 |= 63 & tempj[var2 + 2];
                var4 = true;
            }


            var6 <<= 6;
            if(var2 + 3 < cipherText.length) {
                var6 |= 63 & tempj[var2 + 3];
               // var7 = true;
            }


            var1[var3 + 2] = (char)(var6 & 255);//key[var4?var6 & 255:64];
            var6 >>= 8;
            var1[var3 + 1] = (char)(var6 & 255);//key[var5?var6 & 255:64];
            var6 >>= 8;
            var1[var3] = (char)(var6);
            var2 += 4;
        }
        return var1;
    }






    public static void main(String []args)
    {
        char[] a = encode("y0n".getBytes());
        System.out.print("密文:");
        for (int i = 0; i < a.length; i++)
            System.out.print(a[i]);


        System.out.println();
        char[] b = DeCode("eTBu".getBytes());
        System.out.print("明文:");
        for (int i = 0; i < b.length; i++)
            System.out.print(b[i]);


        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值