项目中药使用加密的东西,我在网上找了点资料(就是剽窃人家的代码) 然后自己整理哈,现在把代码贴在这里以后好用。
/**
 * @Title Encryption.java ,By yangtao at 2011-3-4上午10:37:55
 * 
@version 1.0
 *
 * @Description this is you mark
 * @Company Copyright (c) 2010 AOSA TECH, Ltd. All right reserved
 * @Project SafeMedia
 *
 
*/
package aosa.safemedia.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * @Title Encryption
 * 
@author yangtao at 2011-3-4上午10:38:00
 * @Description 用于对字符串加密使用。
 
*/
public class Encryption {
    
/**
     * @Description 加密的时候要使用的密钥,这个方法就是生成一个密钥并保存在文件中
     *              这个每次生成的密钥都不同,所以这个生成一次就行了,在写入文件的时候应该判断这个文件是否存在,这样是否更合理。
     
*/
    
private void createKey() {
        
try {
            
// 得到密钥的实例 以什么方式加密。加密的方式比较多。
            KeyGenerator kg = KeyGenerator.getInstance("DES");
            kg.init(
56);
            SecretKey key 
= kg.generateKey();
            
// 将生成的密钥对象写入文件。
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(
                    
new FileOutputStream(new File("e:\\key.obj")));
            objectOutputStream.writeObject(key);
        } 
catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } 
catch (FileNotFoundException e) {
            e.printStackTrace();
        } 
catch (IOException e) {
            e.printStackTrace();
        }
    }

    
/**
     * 
@param KeyFilePath
     *            密钥Key对象的路径。注意使用该方法的时候,确保你已经生成了密钥。
     * 
@return
     * @Description 从文件中读出Key,用于加密使用。
     
*/
    
private static Key getKey(String KeyFilePath) {
        Key key 
= null;
        
try {
            
// 将生成的密钥对象从文件中读取出来,然后再强制转换成一个密钥对象。
            ObjectInputStream objectInputStream = new ObjectInputStream(
                    
new FileInputStream(new File(KeyFilePath)));
            key 
= (Key) objectInputStream.readObject();
        } 
catch (FileNotFoundException e) {
            e.printStackTrace();
        } 
catch (IOException e) {
            e.printStackTrace();
        } 
catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
return key;
    }

    
/**
     * 
@param source
     * 
@return 放回一个byte数组,为什么不放回字符串,是因为解密的时候要传入这个byte数组才能进行解密,如果解密的时候传入的是字符串
     *         那么就会出错,愿意是编码的问题。
     * @Description 将传入的字符串进行加密 下面写了将这种byte数组转换成字符串的方法。直接在调用就行了。
     
*/
    
public  byte[] encrypt(String source) {
        
byte[] target = null;
        
try {
            
byte[] center = source.getBytes("UTF-8");
            Key key 
= getKey("e:\\key.obj");
            Cipher cipher 
= Cipher.getInstance("DES");

            cipher.init(Cipher.ENCRYPT_MODE, key);

            target 
= cipher.doFinal(center);
            
        } 
catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } 
catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } 
catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } 
catch (InvalidKeyException e) {
            e.printStackTrace();
        } 
catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } 
catch (BadPaddingException e) {
            e.printStackTrace();
        }
        
        
return target;
    }

    
/**
     * 
@param source
     *            加密后的byte数组。可用加密方法encrypt(“String”)生成即可
     * 
@return 解密后的字符串。
     * @Description 解密算法。
     
*/
    
public  byte[] decrypt(byte[] source) {
        
byte[] dissect = null;
        
try {
            Key key 
= getKey("e:\\key.obj");
            Cipher cipher 
= Cipher.getInstance("DES");
            cipher.init(Cipher.DECRYPT_MODE, key);
// 使用私钥解密
            dissect = cipher.doFinal(source);
            
        } 
catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } 
catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } 
catch (InvalidKeyException e) {
            e.printStackTrace();
        } 
catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } 
catch (BadPaddingException e) {
            e.printStackTrace();
        }
        
return dissect;
    }
    
    
    
/**
     * 
@param bytes
     * @Description 用于把加密后的byte[]数组采用特定的方式写入到文件。
     
*/
    
public void encodeByteToFile(byte[] bytes){
        BASE64Encoder base64encoder 
= new BASE64Encoder();
        
try {
            base64encoder.encode(bytes,
new FileOutputStream(new File("D:\\t.txt")));
        } 
catch (FileNotFoundException e) {
            e.printStackTrace();
        } 
catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    
    
    
    
/**
     * 
@return
     * @Description 由于加密之前采用了编码的格式 所以现在采用特点的方式读出来 ,然后得到用一个byte[]用于解码。
     
*/
    
public byte[] getByteFromFile(){
        BASE64Decoder base64decoder 
= new BASE64Decoder();
        
byte[] encodeByte = null;
        
try {
            encodeByte 
= base64decoder.decodeBuffer(new FileInputStream(new File("D:\\t.txt")));
        } 
catch (FileNotFoundException e) {
            e.printStackTrace();
        } 
catch (IOException e) {
            e.printStackTrace();
        }
        
return encodeByte;
    }
    
    
/**
     * 
@param b
     * 
@param filePath
     * @Description 将指定的字节写入到文件中。
     
*/
    
public  void writeByteToFile(byte[] b, String filePath) {
        File file 
= new File(filePath);
        
if (!file.exists()) {
            
try {
                file.createNewFile();
            } 
catch (IOException e) {
                e.printStackTrace();
            }
        }
        FileOutputStream fileOutputStream;
        
try {
            fileOutputStream 
= new FileOutputStream(file);
            
            fileOutputStream.write(b);
            fileOutputStream.close();
        } 
catch (IOException e) {
            e.printStackTrace();
        }
    }


    
    
//测试使用。
//    public static void main(String[] args) {
//        Encryption encryption = new Encryption();
//        //encryption.dateEncrypt(encryption.encrypt("yangtao"));
//        System.out.println(new String(encryption.decrypt(encryption.getByteFromFile())));
//    }
}
代码写的也不怎么好,只是吧功能实现了。以后功底后了明白了再来修改。