Crypt demo : Encryption « Security « Java

Home
Java
1.2D Graphics GUI
2.3D
3.Advanced Graphics
4.Ant
5.Apache Common
6.Chart
7.Class
8.Collections Data Structure
9.Data Type
10.Database SQL JDBC
11.Design Pattern
12.Development Class
13.EJB3
14.Email
15.Event
16.File Input Output
17.Game
18.Generics
19.GWT
20.Hibernate
21.I18N
22.J2EE
23.J2ME
24.JDK 6
25.JNDI LDAP
26.JPA
27.JSP
28.JSTL
29.Language Basics
30.Network Protocol
31.PDF RTF
32.Reflection
33.Regular Expressions
34.Scripting
35.Security
36.Servlets
37.Spring
38.Swing Components
39.Swing JFC
40.SWT JFace Eclipse
41.Threads
42.Tiny Application
43.Velocity
44.Web Services SOA
45.XML
Java » Security » EncryptionScreenshots 
Crypt demo
      
/* infoScoop OpenSource
 * Copyright (C) 2010 Beacon IT Inc.
 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * as published by the Free Software Foundation.
 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/lgpl-3.0-standalone.html>.
 */

//package org.infoscoop.util;

import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Crypt {

  private static final Crypt thisInstance = new Crypt();
  private static final long serialVersionUID = 7490854493720551678L;
  private static Log log = LogFactory.getLog(Crypt.class);
  public static final byte ENCRYPT = 0;
  public static final byte DECRYPT = 1;
  
  private static SecretKey secretKey;
  
  private Crypt() {
    DESKeySpec dk;
    try {
      dk = new DESKeySpec(new Long(serialVersionUID).toString().getBytes());
      SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
        secretKey = kf.generateSecret(dk);
    catch (Exception e) {
      log.error("", e);
    }
  }
  
  public static Crypt gerCryptInstance() {
    return thisInstance;
  }
  
  public String doCrypt(byte mode, String strthrows Exception {
    if (Crypt.DECRYPT == mode) {
      return decryptByDES(str);
    else if (Crypt.ENCRYPT == mode) {
      return encryptByDES(str);
    }
    return "";
  }
  
  private String encryptByDES(String strthrows Exception{
        Cipher c;
    try {
      c = Cipher.getInstance("DES/ECB/PKCS5Padding");
            c.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] encrypted = c.doFinal(str.getBytes());

            // convert into  hexadecimal number, and return as character string.
            String result = "";
            for (int i = 0; i < encrypted.length; i++) {
              result += byte2HexStr(encrypted[i]);
            }
            
      return result;
    catch (InvalidKeyException e) {
      log.error("The information of the private key may be broken.", e);
      throw e;
    catch (IllegalBlockSizeException e) {
      log.error("The length of data is unjust.", e);
      throw e;
    }
  }
  
  private String decryptByDES(String strthrows Exception{
        Cipher c;
    
    try {
      byte[] tmp = new byte[str.length()/2];
            int index = 0;
            while (index < str.length()) {
              // convert hexadecimal number into decimal number.
              int num = Integer.parseInt(str.substring(index, index + 2)16);
              
              // convert into signed byte.
              if (num < 128) {
                tmp[index/2new Byte(Integer.toString(num)).byteValue();
              else {
                tmp[index/2new Byte(Integer.toString(((num^255)+1)*-1)).byteValue();
              }
              index += 2;
            }
            
            c = Cipher.getInstance("DES/ECB/PKCS5Padding");
            c.init(Cipher.DECRYPT_MODE, secretKey);
            return new String(c.doFinal(tmp));
    catch (InvalidKeyException e) {
      log.error("The information of the private key may be broken.", e);
      throw e;
    catch (IllegalBlockSizeException e) {
      log.error("he length of data is unjust.", e);
      throw e;
    }
  }
  
  private String byte2HexStr(byte binary) {
    StringBuffer sb= new StringBuffer();
    int hex;
    
    hex = (int)binary & 0x000000ff;
    if (!= (hex & 0xfffffff0)) {
      sb.append(Integer.toHexString(hex));
    else {
      sb.append("0" + Integer.toHexString(hex));
    }
    return sb.toString();
  }
  
  public static String getHash(String data){
    return getHash(data, "SHA-256");
  
  
  public static String getHash(String data, String algorithm) {// create a digest from character string
    MessageDigest md = null;
    try{
      md = MessageDigest.getInstance(algorithm);
    }catch(NoSuchAlgorithmException e){
      log.error("", e);
      return null;
    }
    
    byte[] dat = data.getBytes();
    md.update(dat);// calculate a digest from a dat arrangement.
    byte[] digest = md.digest();
    
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < digest.length; i++) {
      int d = digest[i];
      if (d < 0) {// revise it because 128-255 become minus number value with byte type.
        d += 256;
      }
      if (d < 16) {// Because it become one column by a hex digit, if it is 0-15, we add "0" to a head to become two columns.
        sb.append("0");
      }
      sb.append(Integer.toString(d, 16));// display 1 byte of the digest value with hexadecimal two columns
    }
    
    return sb.toString();
  }
}

   
    
    
    
    
    
  
Related examples in the same category
1.Basic symmetric encryption example
2.Encryption and decryption with AES/ECB/PKCS7Padding
3.Cipher with AESECBPKCS7Padding BC
4.Basic symmetric encryption example with CTR using DES
5.Basic symmetric encryption example with padding and CBC using DES
6.Basic symmetric encryption example with padding and ECB using DES
7.CBC using DES with an IV based on a nonce: a hypothetical message number
8.Example of using PBE with a PBEParameterSpec
9.Get Cipher Instance Blowfish
10.Message without tampering with MAC (DES), encryption AES in CTR mode
11.Example of using PBE without using a PBEParameterSpec
12.Getting the Bytes of a Generated Symmetric Key
13.Encryption and Decryption using Symmetric Keys
14.Encrypt a password
15.Cryptography Streams: True Mirror
16.Get the formats of the encoded bytes
17.Create an encrypted string for password
18.Cryptography Streams: URLDigest
19.Easy Blowfish encryption
20.This program tests the AES cipher
21.This program tests the RSA cipher
22.Encrypt User name
23.Crypt Utils
24.Encode a string using algorithm specified in web.xml and return the resulting encrypted password.
25.Encrypts the string along with salt, Decrypts the string and removes the salt
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.