您的位置:首页 > 编程语言 > Java开发

Java中如何进行BASE64编码和解码

2015-06-18 10:32 726 查看
BASE64 编码是一种常用的字符编码,在很多地方都会用到。JDK 中提供了非常方便的 BASE64Encoder 和 BASE64Decoder,用它们可以非常方便的完成基于 BASE64 的编码和解码。下面是本人编的两个小的函数,分别用于 BASE64 的编码和解码:

// 将 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;

}

}

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

public static java.nio.ByteBuffer getFromBASE64byte(String s) {

if (s == null)

return null;

BASE64Decoder decoder = new BASE64Decoder();

try {

return decoder.decodeBufferToByteBuffer(s);//decoder.decodeBuffer(s);

} catch (Exception e) {

return null;

}

}

//将 BASE64 编码的文件进行解码

ByteBuffer value = Base64Utils.getFromBASE64byte(nl.item(i*2+1).getTextContent().trim());FileOutputStream fos = new FileOutputStream(filename); FileChannel fc = fos.getChannel();

fc.write(value);

fos.flush();

fc.close();

import sun.misc.BASE64Encoder;

import sun.misc.BASE64Decoder;

Java中提供了计算报文摘要的另一个简单的方法,那就是使用java.security.MessageDigest类。下列代码片断显示了如何将MD5报文摘要算法(128位的摘要)应用到密码字符串:

MassageDigest md=

MessageDigest.getInstance("MD5");

md.update(originalPwd.getByetes());

byte[] digestedBytes=md.digest();

也使用报文摘要创建校验和、文本的唯一ID(也叫做数字指纹)。在签写ARJ文件会发生:校验和是根据ARJ文件的内容计算出来的,然后被加密,并且用base64的加密格式存放在manifest.mf文件中。base64是编码任意二进制数据的一种方法,得到的结果仅包含可打印字符(注意,base64编码数据占用的空间比转换前多三分之一)。由于报文摘要算法输出的结果是字节数组,可以使用base64编码将哈希字节转换成字符串,以便能将该字符串存放在数据库的varchar字段中。现在有许多base64编码器,但是最简单的方法是使用weblogic.jar库中的编码器:weblogic.apache.xerces.utils.Base64。该类的作用微乎其微,如下面的代码例子所示:

String digestedPwdString =

new String(Base64.encode(digestedPwdBytes));

import javax.mail.internet.*;

import java.security.*;

public String getEncodedHash(String clearText){

ByteArrayOutputStream baos = new ByteArrayOutputStream();

OutputStream out = MimeUtility.encode(baos,"base64");

MessageDigest md = MessageDigest.getInstance("SHA");

if(clearText == null) clearText = "";

byte [] in = clearText.getBytes();

byte [] digested = md.digest(in);

out.write(digested);

out.close();

return new String(baos.toByteArray(), "ISO-8859-1");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: