DES加密解密類-java

來源:互聯網
上載者:User

標籤:

import java.security.*;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;/** * Copyright 2007 GuangZhou Cotel Co. Ltd. * All right reserved.     * DES加密解密類.      * @author <a href="mailto:[email protected]" mce_href="mailto:[email protected]">AmigoXie</a> * @version 1.0  * Creation date: 2007-7-31 - 上午11:59:28 */public class Des {    /** 加密、解密key. */    private static final String PASSWORD_CRYPT_KEY = "kEHrDooxWHCWtfeSxvDvgqZq";    /** 密碼編譯演算法,可用 DES,DESede,Blowfish. */    private final static String ALGORITHM = "DES";    public static void main(String[] args) throws Exception {        String md5Password = "202cb962ac59075b964b07152d234b70";        String str = Des.encrypt(md5Password);        System.out.println("str: " + str);        str = Des.decrypt(str);        System.out.println("str: " + str);    }        /**     * 對資料進行DES加密.     * @param data 待進行DES加密的資料     * @return 返回經過DES加密後的資料     * @throws Exception     * @author <a href="mailto:[email protected]" mce_href="mailto:[email protected]">AmigoXie</a>     * Creation date: 2007-7-31 - 下午12:06:24     */    public final static String decrypt(String data) throws Exception {        return new String(decrypt(hex2byte(data.getBytes()),                PASSWORD_CRYPT_KEY.getBytes()));    }    /**     * 對用DES加密過的資料進行解密.     * @param data DES加密資料     * @return 返回解密後的資料     * @throws Exception     * @author <a href="mailto:[email protected]" mce_href="mailto:[email protected]">AmigoXie</a>     * Creation date: 2007-7-31 - 下午12:07:54     */    public final static String encrypt(String data) throws Exception  {        return byte2hex(encrypt(data.getBytes(), PASSWORD_CRYPT_KEY                .getBytes()));    }        /**     * 用指定的key對資料進行DES加密.     * @param data 待加密的資料     * @param key DES加密的key     * @return 返回DES加密後的資料     * @throws Exception     * @author <a href="mailto:[email protected]" mce_href="mailto:[email protected]">AmigoXie</a>     * Creation date: 2007-7-31 - 下午12:09:03     */    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {        // DES演算法要求有一個可信任的隨機數源        SecureRandom sr = new SecureRandom();        // 從原始密匙資料建立DESKeySpec對象        DESKeySpec dks = new DESKeySpec(key);        // 建立一個密匙工廠,然後用它把DESKeySpec轉換成        // 一個SecretKey對象        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);        SecretKey securekey = keyFactory.generateSecret(dks);        // Cipher對象實際完成加密操作        Cipher cipher = Cipher.getInstance(ALGORITHM);        // 用密匙初始化Cipher對象        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);        // 現在,擷取資料並加密        // 正式執行加密操作        return cipher.doFinal(data);    }    /**     * 用指定的key對資料進行DES解密.     * @param data 待解密的資料     * @param key DES解密的key     * @return 返回DES解密後的資料     * @throws Exception     * @author <a href="mailto:[email protected]" mce_href="mailto:[email protected]">AmigoXie</a>     * Creation date: 2007-7-31 - 下午12:10:34     */    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {        // DES演算法要求有一個可信任的隨機數源        SecureRandom sr = new SecureRandom();        // 從原始密匙資料建立一個DESKeySpec對象        DESKeySpec dks = new DESKeySpec(key);        // 建立一個密匙工廠,然後用它把DESKeySpec對象轉換成        // 一個SecretKey對象        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);        SecretKey securekey = keyFactory.generateSecret(dks);        // Cipher對象實際完成解密操作        Cipher cipher = Cipher.getInstance(ALGORITHM);        // 用密匙初始化Cipher對象        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);        // 現在,擷取資料並解密        // 正式執行解密操作        return cipher.doFinal(data);    }    public static byte[] hex2byte(byte[] b) {        if ((b.length % 2) != 0)            throw new IllegalArgumentException("長度不是偶數");        byte[] b2 = new byte[b.length / 2];        for (int n = 0; n < b.length; n += 2) {            String item = new String(b, n, 2);            b2[n / 2] = (byte) Integer.parseInt(item, 16);        }        return b2;    }    public static 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();    }}

 

DES加密解密類-java

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.