`

java Base64encoder 加密解密

    博客分类:
  • Java
 
阅读更多

代码:

 

package Encryption;

 

import sun.misc.BASE64Encoder;

import sun.misc.BASE64Decoder;

 

public class Encryption {

// 将 s 进行 BASE64 编码

public static String getBASE64(String s) {

if (s == null)

return null;

return (new sun.misc.BASE64Encoder()).encode(s.getBytes());

}

 

// 将 BASE64 编码的字符串 s 进行解码

public static String getFromBASE64(String s) {

if (s == null)

return null;

BASE64Decoder decoder = new BASE64Decoder();

try {

byte[] b = decoder.decodeBuffer(s);

return new String(b);

} catch (Exception e) {

return null;

}

}

}

 

 

改进(转):

 

问题背景:
最近在开发中用到了sun.misc.BASE64Encoder。发现两个问题:
其一、当编码的字节较长时,encode出来的字符串会自动加入\n\r进行自动换行。针对这个问题,原因是rfc规范规定76个字符换一次行。
其二、编码效率较低。

解决办法:
1、重写BASE64Encoder:
Java代码 
public class BASE64Encoder {
	 
    private static char[] codec_table = { 'A', 'B', 'C', 'D', 'E', 'F', 'G',
            'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
            'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
            'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
            'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6',
            '7', '8', '9', '+', '/' };

    public BASE64Encoder() {

    }

    public static String encode(byte[] a) {
        int totalBits = a.length * 8;
        int nn = totalBits % 6;
        int curPos = 0;// process bits
        StringBuffer toReturn = new StringBuffer();
        while (curPos < totalBits) {
            int bytePos = curPos / 8;
            switch (curPos % 8) {
            case 0:
                toReturn.append(codec_table[(a[bytePos] & 0xfc) >> 2]);
                break;
            case 2:

                toReturn.append(codec_table[(a[bytePos] & 0x3f)]);
                break;
            case 4:
                if (bytePos == a.length - 1) {
                    toReturn
                            .append(codec_table[((a[bytePos] & 0x0f) << 2) & 0x3f]);
                } else {
                    int pos = (((a[bytePos] & 0x0f) << 2) | ((a[bytePos + 1] & 0xc0) >> 6)) & 0x3f;
                    toReturn.append(codec_table[pos]);
                }
                break;
            case 6:
                if (bytePos == a.length - 1) {
                    toReturn
                            .append(codec_table[((a[bytePos] & 0x03) << 4) & 0x3f]);
                } else {
                    int pos = (((a[bytePos] & 0x03) << 4) | ((a[bytePos + 1] & 0xf0) >> 4)) & 0x3f;
                    toReturn.append(codec_table[pos]);
                }
                break;
            default:
                //never hanppen
                break;
            }
            curPos+=6;
        }
        if(nn==2)
        {
            toReturn.append("==");
        }
        else if(nn==4)
        {
            toReturn.append("=");
        }
        return toReturn.toString();

    }
}

2、测试重写后的BASE64Encoder效率:

     public static void main(String[] args) throws Exception {
            
        	 
            BASE64Encoder encoder=new BASE64Encoder();
            sun.misc.BASE64Encoder sunEncoder=new sun.misc.BASE64Encoder();
            byte[] testBytes=new byte[1024*1024*2];
            long start=System.currentTimeMillis();
            for(int i=0;i<10;i++)
            {
                sunEncoder.encode(testBytes);
            }
            
            System.out.println("[sun encoder]use time :"+(System.currentTimeMillis()-start));
            start=System.currentTimeMillis();
            for(int i=0;i<10;i++)
            {
                encoder.encode(testBytes);
            }
            
            System.out.println("[our encoder]use time :"+(System.currentTimeMillis()-start));
    
        }
    

    测试后发现,重写后,编码自动回行问题解决,编码效率也会提高一倍。 
    分享到:
    评论

    相关推荐

      BASE64Encoder加密与解密

      利用BASE64Encoder技术 加密与解密

      BASE64Encoder.jar

      一直以来Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的

      sun.misc.BASE64Encoder 加密源码+完整包.rar

      1.包含 sun.misc.BASE64加解密源码和jar【源码仅仅几个类而已】 2.完整的sun.misc.BASE64类【直接项目引用即可】

      Base64Encoder.java

      安卓base64加密和解密工具类。

      BASE64加密解密

      用过无问题,已经写了一份好详细的word文档。如果还是不会请留言。

      BASE64Decoder加密解密工具jar类.zip

      Java开源类库支持AES加密、解密工具帮助类

      java——des加密解密并案例

      Java加密与解密的艺术.pdf Java加密与解密的案例 sun.misc.BASE64Decoder.rar{BASE64Decoder....BASE64Encoder.java CEFormatException.java CEStreamExhausted.java CharacterDecoder.java CharacterEncoder.java}

      BASE64加解密demo

      BASE64加解密实现方式,demo已测试 BASE64Encoder.encode(strSrc.getBytes()); BASE64Encoder.decode(strOut.toCharArray());

      JavaBase64Decoder

      附件中是简化了的Base64编码,其中BASE64Encoder是将字节数组转换为字符串、BASE64Decoder是将字符串转换为字节数组。多用于数据数据加密解密。

      BASE64Decoder jar包

      base64加密和解密,很好用。。。。。。。。。。。。。。。。

      BASE64Decoder包

      加密后字符串:String newKey=(new BASE64Encoder()).encodeBuffer(bt); 解密代码: 加密后的字符串:String newkey="*****"; byte[] bt = (new BASE64Decoder()).decodeBuffer(key); 解密后的字符串: String key=...

      AES数据加密demo,包含BASios,net,安卓,E64Decoder和BASE64Encoder对应的jar包

      AES数据加密,解密demo,包括ios,net,安卓,拿来直接就能使用,其中安卓直接复制里面的txt文档到自己的项目中创建一个utils即可使用。需要的E64Decoder和BASE64Encoder对应的jar包,我已提供在里面

      sun.misc.jar

      Base64算法的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder来进行的,例如Base64 和 Base64URL等需要依赖它

      BASE64Decoder.rar

      base64加密和解密,很好用,亲测试可用,包含sun.misc.BASE64Decoder和sun.misc.BASE64Encoder

      使用JAVA代码实现MD5加密

      BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(md.digest(str.getBytes("utf-8"))); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } }

      Abdal Base64 Encoder Decoder:Base64编码器解码器工具-开源

      Abdal Base64 Encoder Decoder工具可以免费执行加密和解密过程,并且完全免费,但是请注意,此工具不应用于加密非常敏感的信息。

      BASE64ofsun.zip

      Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder 这人类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,...

      BASE64All源码与jar包

      import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; BASE64加密与解密使用的jar包

      base64.js文件

      js用BASE64.encoder(str) 加密 后台java可用Base64.decodeBase64(bytes)解密(import org.apache.commons.codec.binary.Base64;)

    Global site tag (gtag.js) - Google Analytics