在 Java 中如何进行 BASE64,一个有趣的发现 mht html htm base64 java
原程序出自james中,我只是加了一个main方法,并注释package. 文件名:Base64.java 用法: java Base64 enc 好人 输出:usPIywAA java Base64 dec usPIywAA 输出:好人 修改人:hajavaor
如果想了解Base64的相关编码与解码的知识, 强烈推荐:http://www.luocong.com/articles/show_article.asp?Article_ID=17 文章标题:矛与盾的较量(4)——奇妙的Base64编码
看完后,就完全知道base64是怎么回事了。
更多精彩,请见文章最后,我的发现。
闲话不多说,见java源程序。
file://程序开始 /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache", "Jakarta", "JAMES" and "Apache Software Foundation" * must not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [email protected]. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * Portions of this software are based upon public domain software * originally written at the National Center for Supercomputing Applications, * University of Illinois, Urbana-Champaign. */
file://package org.apache.james.util;
import javax.mail.internet.MimeUtility; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStreamReader;
/** * Simple Base64 string decoding function * @author Jason Borden <[email protected]> * * @version This is $Revision: 1.5.4.2 $ */
public class Base64 {
public static BufferedReader decode(String b64string) throws Exception { return new BufferedReader( new InputStreamReader( MimeUtility.decode( new ByteArrayInputStream( b64string.getBytes()), "base64"))); } file://2003-10-29 10:28 hajavaor added public static void main(String args[]) throws Exception{ if (args.length!=2){ System.err.println("Usage: java Base64 encORdec yourStrings"); System.exit(0); } String str1 = args[0].trim(); if (str1.equalsIgnoreCase("enc")){ System.out.println(encodeAsString(args[1])); } else if(str1.equalsIgnoreCase("dec")){ System.out.println(decodeAsString(args[1])); } else{ System.err.println("Usage: java Base64 encORdec yourStrings"); System.exit(0); } } //
public static String decodeAsString(String b64string) throws Exception { if (b64string == null) { return b64string; } String returnString = decode(b64string).readLine(); if (returnString == null) { return returnString; } return returnString.trim(); }
public static ByteArrayOutputStream encode(String plaintext) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] in = plaintext.getBytes(); ByteArrayOutputStream inStream = new ByteArrayOutputStream(); inStream.write(in, 0, in.length); // pad if ((in.length % 3 ) == 1){ inStream.write(0); inStream.write(0); } else if((in.length % 3 ) == 2){ inStream.write(0); } inStream.writeTo( MimeUtility.encode(out, "base64") ); return out; }
public static String encodeAsString(String plaintext) throws Exception { return encode(plaintext).toString(); }
} ///程序结束。
一个有趣的发现(关于微软mht文件的格式): 我们用IE另存网页文件时,有多种选择。 1、WEB页全部。你会发现一个html文件及一个相应的文件夹。这样,我们在打开这个网页文件的时候,能同时看到网页的附加元素(图片、样式表、帧等)。windows系统将这个文件与文件夹建立了一种关联,当你移动html文件的时候,你发现文件夹也同时被移动了。当你删除这个文件夹的时候,会发现文件也被删除了。我们可以先将文件夹改名,然后就可以安全删除文件夹了。 2、WEB文档,单一格式,即mht文件。这样我们就可以在一个文件中保存网页的全部内容。你可以用记事本打开这个文件,会发现:里面的正文以Base64编码,并且整个文件结构很象邮件的结构。是这样的吗?将mht改名为eml,然后双击,竟然真的能用Outlook express打开了。 原来,mht文件就是一封邮件,内容以Base64编码。 同理,你可以将邮件从outlook express拖到外面,生成一个*.eml文件。将文件改名试试。 有意思。
谁对mht格式有进一步的分析,请续之。
多谢。

|