java實現DES的加密解密

java實現DES的加密解密

創建一個類 CryptTest,在這個類裏面些方法。

首先需要導入這個jar包

這裏寫圖片描述

這裏寫圖片描述

需要這個方法

/**
     * 將兩個ASCII字符合成一個字節; 如:"EF"--> 0xEF
     * 
     * @param src0
     *            byte
     * @param src1
     *            byte
     * @return byte
     */
    public static byte uniteBytes(byte src0, byte src1) {
        byte _b0 = Byte.decode("0x" + new String(new byte[] { src0 }))
                .byteValue();
        _b0 = (byte) (_b0 << 4);
        byte _b1 = Byte.decode("0x" + new String(new byte[] { src1 }))
                .byteValue();
        byte ret = (byte) (_b0 ^ _b1);
        return ret;
    }

進制轉換的方法

/**
     * 將二進制轉化爲16進制字符串
     * 
     * @param b
     *            二進制字節數組
     * @return String
     */
    public String byte2hex(byte[] b) {
        String hs = "";
        String stmp = "";
        for (int n = 0; n < b.length; n++) {
            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
            if (stmp.length() == 1) {
                hs = hs + "0" + stmp;
            } else {
                hs = hs + stmp;
            }
        }
        return hs.toUpperCase();
    }

    /**
     * 十六進制字符串轉化爲2進制
     * 
     * @param hex
     * @return
     */
    public byte[] hex2byte(String hex) {
        byte[] ret = new byte[8];
        byte[] tmp = hex.getBytes();
        for (int i = 0; i < 8; i++) {
            ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
        }
        return ret;
    }

創建密鑰

/**
     * 創建密匙
     * 
     * @param algorithm
     *            加密算法,可用 DES,DESede,Blowfish
     * @return SecretKey 祕密(對稱)密鑰
     */
    public SecretKey createSecretKey(String algorithm) {
        // 聲明KeyGenerator對象
        KeyGenerator keygen;
        // 聲明 密鑰對象
        SecretKey deskey = null;
        try {
            // 返回生成指定算法的祕密密鑰的 KeyGenerator 對象
            keygen = KeyGenerator.getInstance(algorithm);
            // 生成一個密鑰
            deskey = keygen.generateKey();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        // 返回密匙
        return deskey;
    }

DES加密

/**
     * 根據密匙進行DES加密
     * 
     * @param key
     *            密匙
     * @param info
     *            要加密的信息
     * @return String 加密後的信息
     */
    public String encryptToDES(SecretKey key, String info) {
        // 定義 加密算法,可用 DES,DESede,Blowfish
        String Algorithm = "DES";
        // 加密隨機數生成器 (RNG),(可以不寫)
        SecureRandom sr = new SecureRandom();
        // 定義要生成的密文
        byte[] cipherByte = null;
        try {
            // 得到加密/解密器
            Cipher c1 = Cipher.getInstance(Algorithm);
            // 用指定的密鑰和模式初始化Cipher對象
            // 參數:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)
            c1.init(Cipher.ENCRYPT_MODE, key, sr);
            // 對要加密的內容進行編碼處理,
            cipherByte = c1.doFinal(info.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 返回密文的十六進制形式
        return byte2hex(cipherByte);
    }

DES解密

/**
     * 根據密匙進行DES解密
     * 
     * @param key
     *            密匙
     * @param sInfo
     *            要解密的密文
     * @return String 返回解密後信息
     */
    public String decryptByDES(SecretKey key, String sInfo) {
        // 定義 加密算法,
        String Algorithm = "DES";
        // 加密隨機數生成器 (RNG)
        SecureRandom sr = new SecureRandom();
        byte[] cipherByte = null;
        try {
            // 得到加密/解密器
            Cipher c1 = Cipher.getInstance(Algorithm);
            // 用指定的密鑰和模式初始化Cipher對象
            c1.init(Cipher.DECRYPT_MODE, key, sr);
            // 對要解密的內容進行編碼處理
            cipherByte = c1.doFinal(hex2byte(sInfo));
        } catch (Exception e) {
            e.printStackTrace();
        }
        // return byte2hex(cipherByte);
        return new String(cipherByte);
    }

測試方法 mian

/**
     * 測試
     * 
     * @param args
     */
    public static void main(String[] args) {
        // 生成一個DES算法的密匙
        SecretKey key = jiami.createSecretKey("DES");
        // 用密匙加密信息"Hello world!"
        String str1 = jiami.encryptToDES(key, "Hello");
        System.out.println("使用des加密信息Hello爲:" + str1);
        // 使用這個密匙解密
        String str2 = jiami.decryptByDES(key, str1);
        System.out.println("解密後爲:" + str2);
    }

運行效果

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章