- 浏览: 103113 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wxynxyo:
非常感谢,解决了一个问题
Spring MVC 类型转换 @InitBinder使用 转 -
hxsmile:
很清晰明了
MyEclipse下XFire开发Webservice实例 -
yaoyy:
...
MyEclipse下XFire开发Webservice实例 -
hyl523:
好,明白了,多谢!
MyEclipse下XFire开发Webservice实例
代码:
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:
2、测试重写后的BASE64Encoder效率:
测试后发现,重写后,编码自动回行问题解决,编码效率也会提高一倍。
最近在开发中用到了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)); }
测试后发现,重写后,编码自动回行问题解决,编码效率也会提高一倍。
发表评论
-
JDK使用InvocationHandler和Proxy实现动态代理
2013-06-11 23:54 920----------------------- ... -
java 内存溢出
2013-06-03 16:25 760java虚拟机的内存基本概念: PermGen spac ... -
java NIO (转)
2012-11-06 16:11 6911. 基本 概念 IO 是主存和外部设备 ( 硬盘、终 ... -
Socket + json + tomcat
2012-10-24 15:09 1278本文主要实现不同tomcat服务器之间通过socket通信,数 ... -
java 日志 log4j和slf4j
2012-10-22 23:01 873log4j简易入门 package ... -
java JDBC
2012-10-09 11:34 764分为6个步骤 1. load the driver (1)Cl ... -
java 文件上传下载
2012-09-09 12:05 857文件下载 import java.io.Buff ... -
java JExcelUtil
2012-09-09 11:54 4import java.io.File; imp ... -
java 日记
2012-09-06 23:14 5381、调用本地动态库(.dll),使用技术 jna 2、 ... -
java IO
2012-09-02 17:20 858流(IO管道): 1、inputStream O ... -
java 线程
2012-09-02 00:06 640线程:线程并行;方 ... -
java的基本数据类型
2012-08-16 16:03 7java的8种基本数据类型包括:byte、short、 ... -
java Junit
2012-08-11 00:19 761什么是单元测试 ... -
Java Socket编程
2012-08-08 21:13 589第一步 充分理解Socket ... -
java 反射 获得属性值
2012-05-02 22:55 2785通过java反射获得属性值 J ... -
JAVA IO 乱码
2012-05-02 22:59 42012-04-18 20:38 最近在做HTML静态生 ... -
Java 开发代理服务器
2012-08-07 11:01 678代理服务器的应用非 ... -
java excel
2012-08-07 21:27 1035JXL 读写以及修改EXCEL文件 首先引用网上的文 ...
相关推荐
利用BASE64Encoder技术 加密与解密
一直以来Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的
1.包含 sun.misc.BASE64加解密源码和jar【源码仅仅几个类而已】 2.完整的sun.misc.BASE64类【直接项目引用即可】
安卓base64加密和解密工具类。
用过无问题,已经写了一份好详细的word文档。如果还是不会请留言。
Java开源类库支持AES加密、解密工具帮助类
Java加密与解密的艺术.pdf Java加密与解密的案例 sun.misc.BASE64Decoder.rar{BASE64Decoder....BASE64Encoder.java CEFormatException.java CEStreamExhausted.java CharacterDecoder.java CharacterEncoder.java}
BASE64加解密实现方式,demo已测试 BASE64Encoder.encode(strSrc.getBytes()); BASE64Encoder.decode(strOut.toCharArray());
附件中是简化了的Base64编码,其中BASE64Encoder是将字节数组转换为字符串、BASE64Decoder是将字符串转换为字节数组。多用于数据数据加密解密。
base64加密和解密,很好用。。。。。。。。。。。。。。。。
加密后字符串:String newKey=(new BASE64Encoder()).encodeBuffer(bt); 解密代码: 加密后的字符串:String newkey="*****"; byte[] bt = (new BASE64Decoder()).decodeBuffer(key); 解密后的字符串: String key=...
AES数据加密,解密demo,包括ios,net,安卓,拿来直接就能使用,其中安卓直接复制里面的txt文档到自己的项目中创建一个utils即可使用。需要的E64Decoder和BASE64Encoder对应的jar包,我已提供在里面
Base64算法的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder来进行的,例如Base64 和 Base64URL等需要依赖它
base64加密和解密,很好用,亲测试可用,包含sun.misc.BASE64Decoder和sun.misc.BASE64Encoder
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的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder 这人类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,...
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; BASE64加密与解密使用的jar包
js用BASE64.encoder(str) 加密 后台java可用Base64.decodeBase64(bytes)解密(import org.apache.commons.codec.binary.Base64;)