DES 加解密的封装和 使用的例子

类别:Java 点击:0 评论:0 推荐:

原创:[email protected] ,欢迎喜欢Java的网友加我

DES加密封装

package org.jtool.desutils;
import java.security.SecureRandom;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
public class DESEncrypt {
    private byte[] desKey;
    public DESEncrypt(byte[] desKey) {
        this.desKey = desKey;
    }
    public byte[] doEncrypt(byte[] plainText) throws Exception {
        //      DES算法要求有一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
        byte rawKeyData[] = desKey;/* 用某种方法获得密匙数据 */
        // 从原始密匙数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(rawKeyData);
        // 创建一个密匙工厂,然后用它把DESKeySpec转换成
        // 一个SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey key = keyFactory.generateSecret(dks);
        // Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance("DES");
        // 用密匙初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, key, sr);
        // 现在,获取数据并加密
        byte data[] = plainText;/* 用某种方法获取数据 */
        // 正式执行加密操作
        byte encryptedData[] = cipher.doFinal(data);
        return encryptedData;
    }
}

DES解密封装

package org.jtool.desutils;
import java.security.SecureRandom;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
public class DESDecrypt {
    private byte[] desKey;
    public DESDecrypt(byte[] desKey) {
        this.desKey = desKey;
    }
    public byte[] doDecrypt(byte[] encryptText) throws Exception {
        //      DES算法要求有一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
        byte rawKeyData[] = desKey; /* 用某种方法获取原始密匙数据 */
        // 从原始密匙数据创建一个DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(rawKeyData);
        // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成
        // 一个SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey key = keyFactory.generateSecret(dks);
        // Cipher对象实际完成解密操作
        Cipher cipher = Cipher.getInstance("DES");
        // 用密匙初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, key, sr);
        // 现在,获取数据并解密
        byte encryptedData[] = encryptText;/* 获得经过加密的数据 */
        // 正式执行解密操作
        byte decryptedData[] = cipher.doFinal(encryptedData);
        return decryptedData;
    }
}

DES加解密使用样例

package org.jtool.desutils;
/**
 *
 */
public class DESTest {
    public static void main(String[] args) throws Exception {
        String key = "ABCDEFGH";
        String value = "AABBCCDDEE";
        DESEncrypt desEncrypt = new DESEncrypt(key.getBytes());
        byte[] encryptText = desEncrypt.doEncrypt(value.getBytes());
        System.out.println("doEncrypt - " + toHexString(encryptText));
        System.out.println("doEncrypt - " + new String(encryptText));
        DESDecrypt desDecrypt = new DESDecrypt(key.getBytes());
        byte[] decryptText = desDecrypt.doDecrypt(encryptText);
        System.out.println("doDecrypt - " + new String(decryptText));
        System.out.println("doDecrypt - " + toHexString(decryptText));
    }
    /**
     * 16进制显示数据
     *
     * @param value 字节数组
     * @return
     */
    public static String toHexString(byte[] value) {
        String newString = "";
        for (int i = 0; i < value.length; i++) {
            byte b = value[i];
            String str = Integer.toHexString(b);
            if (str.length() > 2) {
                str = str.substring(str.length() - 2);
            }
            if (str.length() < 2) {
                str = "0" + str;
            }
            newString += str;
        }
        return newString.toUpperCase();
    }
}

本文地址:http://com.8s8s.com/it/it10218.htm