You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ch...@apache.org on 2001/06/06 17:30:32 UTC

cvs commit: jakarta-james/proposals/v1.3/java/org/apache/james/security DigestUtil.java

charlesb    01/06/06 08:30:32

  Added:       proposals/v1.3/java/org/apache/james/security
                        DigestUtil.java
  Log:
  Class to make handling Digests easier
  
  Revision  Changes    Path
  1.1                  jakarta-james/proposals/v1.3/java/org/apache/james/security/DigestUtil.java
  
  Index: DigestUtil.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.james.security;
  
  import java.io.IOException;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.OutputStream;
  import java.security.MessageDigest;
  import java.security.NoSuchAlgorithmException;
  import javax.mail.MessagingException;
  import javax.mail.internet.MimeUtility;
  
  
  /**
   * Class to compute and verify digests of files and strings
   *
   * @author <a href="mailto:charles@benett1.demon.co.uk">Charles Benett</a>
   *
   * Last changed by: $Author: charlesb $ on $Date: 2001/06/06 15:30:30 $
   * $Revision: 1.1 $
   */
  public class DigestUtil {
  
      /**
       * Command line interface. Use -help for arguments
       */
      public static void main(String[] args) {
  
  	String alg = "SHA";
  	boolean file = false;
  
  	if (args.length == 0 || args.length > 4)
          {
  	    printUsage();
  	    return;
  	}
  
  	for (int i = 0; i < args.length; i++)
          {
              if (args[i].equalsIgnoreCase("-help")
                   || args[i].equalsIgnoreCase("-usage"))
              {
  	    printUsage();
  	    return;
  	    }
              if (args[i].equalsIgnoreCase("-alg"))
              {
  		alg = args[i+1];
  	    }
              if (args[i].equalsIgnoreCase("-file"))
              {
  		file = true;
  	    }
  	}
  
          if (file)
  	{
  	    digestFile(args[args.length - 1], alg);
  	    return ;
  	}
          else 
          {
              try 
  	    {
  	        String hash = digestString(args[args.length - 1], alg);
  	        System.out.println("Hash is: " + hash);
  		return;
  	    }
              catch (NoSuchAlgorithmException nsae)
  	    {
                  System.out.println("No such algorithm available");
  	    }
  	}
      }
  
      /**
       * For CLI only
       */
      public static void printUsage() {
  	System.out.println("Usage: " 
                             + "java org.apache.james.security.DigestUtil"
                             + " [-alg algorithm]"
                             + " [-file] filename|string");
      }
  
      /**
       * Calculate digest of given file with given algorithm.
       * Writes digest to file named filename.algorithm
       *
       * @param filename the String name of the file to be hashed
       * @param algorithm the algorithm to be used
       */
      public static void digestFile(String filename, String algorithm) {
  	byte[] b = new byte[65536];
  	int count = 0;
  	int read = 0;
  	FileInputStream fis = null;
  	FileOutputStream fos = null;
  	try
          {
  	    MessageDigest md = MessageDigest.getInstance(algorithm);
  	    fis = new FileInputStream(filename);
  	    while (fis.available() > 0)
              {
  		read =  fis.read(b);
  		md.update(b, 0, read);
  		count += read;
  	    }
  	    byte[] digest = md.digest();
  	    fos = new FileOutputStream(filename + "." + algorithm);
  	    OutputStream encodedStream = MimeUtility.encode(fos, "base64");
  	    encodedStream.write(digest);
  	    fos.flush();
  	}
          catch (Exception e)
          {
  	    System.out.println("Error computing Digest: " + e);
  	}
          finally
          {
  	    try
              {
  		fis.close();
  		fos.close();
  	    }
              catch (Exception ignored)
              {
  	    }
  	}
      }
  
      /**
       * Calculate digest of given String using given algorithm.
       * Encode digest in MIME-like base64
       *
       * @param pass the String to be hashed
       * @param algorithm the algorithm to be used
       * @returns String Base-64 encoding of digest
       */
      public static String digestString(String pass, String algorithm )
              throws NoSuchAlgorithmException  {
  
  	MessageDigest md;
  	ByteArrayOutputStream bos;
  
          try
          {
              md = MessageDigest.getInstance(algorithm);
              byte[] digest = md.digest(pass.getBytes("iso-8859-1"));
  	    bos = new ByteArrayOutputStream();
  	    OutputStream encodedStream = MimeUtility.encode(bos, "base64");
  	    encodedStream.write(digest);
  	    return bos.toString("iso-8859-1");
  
  	}
          catch (IOException ioe) 
  	{
  	    throw new RuntimeException("Fatal error: " + ioe);
  	}
          catch (MessagingException me) 
  	{
  	    throw new RuntimeException("Fatal error: " + me);
  	}
      }
  
  
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: james-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: james-dev-help@jakarta.apache.org