在 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格式有进一步的分析,请续之。 
    多谢。 
   
 
  |