- 浏览: 107112 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 974----------------------- ... -
java 内存溢出
2013-06-03 16:25 805java虚拟机的内存基本概念: PermGen spac ... -
java NIO (转)
2012-11-06 16:11 7621. 基本 概念 IO 是主存和外部设备 ( 硬盘、终 ... -
Socket + json + tomcat
2012-10-24 15:09 1317本文主要实现不同tomcat服务器之间通过socket通信,数 ... -
java 日志 log4j和slf4j
2012-10-22 23:01 919log4j简易入门 package ... -
java JDBC
2012-10-09 11:34 793分为6个步骤 1. load the driver (1)Cl ... -
java 文件上传下载
2012-09-09 12:05 938文件下载 import java.io.Buff ... -
java JExcelUtil
2012-09-09 11:54 4import java.io.File; imp ... -
java 日记
2012-09-06 23:14 5631、调用本地动态库(.dll),使用技术 jna 2、 ... -
java IO
2012-09-02 17:20 901流(IO管道): 1、inputStream O ... -
java 线程
2012-09-02 00:06 674线程:线程并行;方 ... -
java的基本数据类型
2012-08-16 16:03 7java的8种基本数据类型包括:byte、short、 ... -
java Junit
2012-08-11 00:19 801什么是单元测试 ... -
Java Socket编程
2012-08-08 21:13 614第一步 充分理解Socket ... -
java 反射 获得属性值
2012-05-02 22:55 2847通过java反射获得属性值 J ... -
JAVA IO 乱码
2012-05-02 22:59 42012-04-18 20:38 最近在做HTML静态生 ... -
Java 开发代理服务器
2012-08-07 11:01 710代理服务器的应用非 ... -
java excel
2012-08-07 21:27 1071JXL 读写以及修改EXCEL文件 首先引用网上的文 ...
相关推荐
在Java编程中,图片Base64加密解密是一种常见的数据处理技术,特别是在网络传输和存储时,由于Base64编码可以将二进制数据转换为可打印的ASCII字符,因此非常适用。`sun.misc.BASE64Encoder`和`sun.misc.BASE64...
然而,需要注意的是,这两个类自JDK 9起已被弃用,建议使用`java.util.Base64`包中的`Base64.getEncoder()`和`Base64.getDecoder()`方法来进行BASE64的编码和解码工作。 #### 示例代码分析 给出的代码示例展示了...
【标签】:"java base64 Decoder Encoder 加密解密" 在Java中,BASE64的加密和解密操作主要依赖于`java.util.Base64`类,该类从Java 8开始引入,提供了完整的BASE64编码和解码功能。其中,`Encoder`接口用于进行...
总之,Java提供了方便的`java.util.Base64`工具类来处理Base64编码和解码,使得在Java项目中实现Base64加密解密变得简单且高效。这个基础的加密解密机制虽然简单,但在很多场景下已经足够满足基本的数据保护需求。
这个"BASE64Encoder.jar"可能提供了更简便的命令行接口或者图形用户界面,使得用户无需编写代码就能进行字符串的BASE64加密和解密操作。在实际应用中,这样的工具可以帮助开发者快速处理数据的编码转换,尤其是在...
冲浪后发现JDK中的lib\tools.jar和JRE中的lib\rt.jar已从Java SE 9中删除,也就是1.8版本后的jdk已经不再支持sun.misc.BASE64Decoder和sun.misc.BASE64Encoder。 这些JAR中可用的类和资源现在以文件中的内部格式存储...
本文将详细探讨如何在Hive中自定义User Defined Function(UDF)来实现Base64的加密和解密。 首先,我们需要了解Base64的基本原理。Base64是一种将任意二进制数据转化为ASCII字符集的方法,它通过将每3个字节转换为...
总的来说,Java的Base64和RSA加密解密技术在保护数据安全、传输敏感信息时发挥着重要作用。理解并熟练掌握这两者,对于开发涉及数据安全的Java应用程序至关重要。在实际操作中,应根据具体需求选择合适的加密解密...
下面我们将详细探讨如何在Java中实现Base64加密和解密: 1. **Base64编码**: 使用`java.util.Base64.Encoder`接口的`encodeToString()`方法可以将字节数组编码为Base64字符串。例如: ```java byte[] bytes = ...
在这个"Base64批量加密工具"中,我们看到作者使用Java语言编写了一个程序,用于自动化处理一批文件或数据的Base64编码过程,避免了手动逐条加密的繁琐。 在Java中,实现Base64编码主要依赖于`java.util.Base64`这个...
在压缩包中的"java加密、解密"文件中,很可能包含了实现这些加密解密操作的Java代码示例,包括类、方法和可能的测试用例。通过阅读和学习这些代码,开发者可以更好地理解和应用上述加密算法,同时了解如何在实际项目...
本主题将深入探讨“Base64转码解密成明文”以及“Base64加密成Java密文”的过程,并介绍相关的Java实现。 首先,我们来看Base64解码。Base64编码的基本原理是将每3个字节的数据(24位)分成4组,每组6位,然后将这6...
以下是如何使用BASE64对文件进行加密和解密的示例: ```java import java.nio.file.Files; import java.nio.file.Paths; import java.util.Base64; public class Base64Util { public static String ...
Java平台提供了多种方式来实现Base64的加密和解密操作。这里我们将详细探讨Java中如何进行Base64的编码与解码。 1. **Base64编码原理** Base64编码基于64个可打印字符,这些字符包括大小写字母、数字以及"+"和"/...
安卓base64加密和解密工具类。
在Java中,`java.util.Base64`类提供了三种不同的编码器和解码器:`Encoder`、`Decoder`以及`Get`和`Set`方法。`Encoder`用于将字节数据编码为Base64字符串,而`Decoder`则负责将Base64字符串解码回原始字节数据。...
本文将深入探讨Base64编码原理,JavaScript中的实现方式,以及如何封装一个Base64的加密解密工具。 Base64编码的基本原理是将每3个字节(24位)的数据拆分为4组,每组6位,然后将这6位二进制数据转换为其对应的...
在Java中,我们可以使用内置的`java.util.Base64`类来进行Base64的加密和解密操作。 Base64加密(编码)的过程是这样的:首先,输入的数据被分为每三个字节一组,因为每个字节有8位,三个字节共有24位。Base64将这...
在Java中,我们可以使用内置的`java.util.Base64`类来实现BASE64的加密和解密操作。这个"BASE64加密源码完整JAR包"很可能包含了一个或者多个Java类,提供了方便的BASE64编码接口,便于开发者集成到他们的项目中。 ...
在Java中,Base64的加密和解密操作可以通过Java 8引入的`java.util.Base64`类来实现。以下是简单的使用示例: ```java import java.util.Base64; public class Base64Example { public static void main(String[]...