1. 程式人生 > >Java實現DES加密解密演算法

Java實現DES加密解密演算法

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

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.io.IOException;
import java.security.SecureRandom;

/**
 * DES加密演算法
 * Created by lipeng on 2017/6/6.
 */
public class DesUtil {

    private final static String DES = "DES";
    private final static String ENCODE = "GBK";
    private final static String defaultKey = "qkxTskldu";

    public static void main(String[] args) throws Exception {
        String data = "測試ss";
        System.out.println(encrypt(data));
        System.out.println(decrypt(encrypt(data)));

    }

    /**
     * 使用 預設key 加密
     *
     * @return String
     * @author lifq
     * @date 2015-3-17 下午02:46:43
     */
    public static String encrypt(String data) throws Exception {
        byte[] bt = encrypt(data.getBytes(ENCODE), defaultKey.getBytes(ENCODE));
        String strs = new BASE64Encoder().encode(bt);
        return strs;
    }

    /**
     * 使用 預設key 解密
     *
     * @return String
     * @author lifq
     * @date 2015-3-17 下午02:49:52
     */
    public static String decrypt(String data) throws IOException, Exception {
        if (data == null)
            return null;
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] buf = decoder.decodeBuffer(data);
        byte[] bt = decrypt(buf, defaultKey.getBytes(ENCODE));
        return new String(bt, ENCODE);
    }

    /**
     * Description 根據鍵值進行加密
     *
     * @param data
     * @param key
     *            加密鍵byte陣列
     * @return
     * @throws Exception
     */
    public static String encrypt(String data, String key) throws Exception {
        byte[] bt = encrypt(data.getBytes(ENCODE), defaultKey.getBytes(ENCODE));
        String strs = new BASE64Encoder().encode(bt);
        return strs;
    }

    /**
     * Description 根據鍵值進行解密
     *
     * @param data
     * @param key
     *            加密鍵byte陣列
     * @return
     * @throws IOException
     * @throws Exception
     */
    public static String decrypt(String data, String key) throws IOException,
            Exception {
        if (data == null)
            return null;
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] buf = decoder.decodeBuffer(data);
        byte[] bt = decrypt(buf, key.getBytes(ENCODE));
        return new String(bt, ENCODE);
    }

    /**
     * Description 根據鍵值進行加密
     *
     * @param data
     * @param key
     *            加密鍵byte陣列
     * @return
     * @throws Exception
     */
    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        // 生成一個可信任的隨機數源
        SecureRandom sr = new SecureRandom();

        // 從原始金鑰資料建立DESKeySpec物件
        DESKeySpec dks = new DESKeySpec(key);

        // 建立一個金鑰工廠,然後用它把DESKeySpec轉換成SecretKey物件
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);

        // Cipher物件實際完成加密操作
        Cipher cipher = Cipher.getInstance(DES);

        // 用金鑰初始化Cipher物件
        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

        return cipher.doFinal(data);
    }

    /**
     * Description 根據鍵值進行解密
     *
     * @param data
     * @param key
     *            加密鍵byte陣列
     * @return
     * @throws Exception
     */
    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        // 生成一個可信任的隨機數源
        SecureRandom sr = new SecureRandom();

        // 從原始金鑰資料建立DESKeySpec物件
        DESKeySpec dks = new DESKeySpec(key);

        // 建立一個金鑰工廠,然後用它把DESKeySpec轉換成SecretKey物件
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);

        // Cipher物件實際完成解密操作
        Cipher cipher = Cipher.getInstance(DES);

        // 用金鑰初始化Cipher物件
        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

        return cipher.doFinal(data);
    }
}


相關推薦

Java實現DES加密解密演算法

import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFact

DES加密解密演算法C語言程式碼實現

程式碼: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 /*------------------------ 5 定義列舉型全域性變數 6 -----

網路安全學習之C語言版DES加密解密演算法的程式設計與實現

其實明白了DES演算法的流程程式設計實現是不難的,當然可能會在S盒實現那碰到點問題。下面的DES演算法包括加密和解密兩個功能,主要有生成16個子金鑰和DES演算法的主程式組成。輸出的資訊有16輪子金鑰以及每輪的中間值以及最後的結果。具體的程式碼中都有註釋,就看程式碼吧。關於D

JAVA實現DES加密實現詳解

ava util des算法 直接 print uri ret secure 過程 package util; import java.security.SecureRandom; import javax.crypto.spec.DESKeySpec; import j

條理清晰的入門:使用Java實現RSA加密解密

條理清晰的入門:使用Java實現RSA加密解密 什麼是RSA 使用Java 需要匯入的標頭檔案 生成公鑰、私鑰 進行加密解密 金鑰的儲存 密文的儲存、讀取 什麼是RSA 翻一下以前的密碼

資料的加密傳輸——微控制器上實現TEA加密解密演算法

http://www.eeworld.com.cn/mcu/article_2016121632367.html 各位大俠在做資料傳輸時,有沒有考慮過把資料加密起來進行傳輸,若在串列埠或者無線中把所要傳的資料加密起來,豈不是增加了通訊的安全性。常用的加密解密演算法比如DES、RSA等,受限於微控

C++呼叫openssl實現DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式

==============================================     des   cbc  加密 zeropadding填充方式 ============================================== //加密 cbc ze

JAVA實現RSA加密解密

RSA 工具類。提供加密,解密,生成金鑰對等方法。  RSA加密原理概述   : RSA的安全性依賴於大數的分解,公鑰和私鑰都是兩個大素數(大於100的十進位制位)的函式。 據猜測,從一個金鑰和密文推斷出明文的難度等同於分解兩個大素數的積    金鑰的產生:     1.選

C#寫Des加密解密演算法

馬上就要實習了,求大大們介紹工作。QQ:1028962069 原始碼地址 http://download.csdn.net/detail/h1028962069/8618367 我只寫關鍵程式碼。 介面如下 類 using System; using System.Col

php和c#一致的DES加密解密演算法

DES加解密演算法,在C#與PHP中的通用類。 注意: 1、類中的祕鑰key跟向量iv,均用的同樣的值 2、編碼均採用的utf-8 以下為具體程式碼,可以直接複製去進行實際測試 C#版程式碼: using System; using System.Data;

java php DES 加密解密

Java程式碼   import java.io.IOException;   import java.security.SecureRandom;   import javax.crypto.Cipher;   import javax.crypto.SecretKey;   import jav

java實現AES加密解密

package com.utils; import org.apache.tomcat.util.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpe

Java 實現 RSA加密解密及數字簽名

RSA公鑰加密演算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。 RSA是目

用C#實現DES加密解密封裝

{            byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));            byte[] keyIV = keyBytes;            byte[] inputByteArray = Convert.

C#DES加密,JavaDES解密,另轉C#和Java實現Des完整代碼

sso output uri sta RM light ash for str C#DES加密,JavaDES解密,另轉C#和Java實現Des完整代碼 轉載 2014年06月17日 17:36:09 標簽: DES / C#DES / JavaDES /

DES加密解密->java實現

DES加密解密涉及到的JAVA類 Cipher 此類為加密和解密提供密碼功能。它構成了 Java Cryptographic Extension (JCE) 框架的核心。 為建立 Cipher 物件,應用程式呼叫 Cipher 的 getInstan

java實現對稱加密AES和DES加密解密

        目前主流的加密方式有:1、對稱加密:AES、DES      2、非對稱加密:RSA、DSA。         本文主要講解java實現呼叫AES/DES加密演算法包,呼叫過程最精要的就是下面兩句話: Cipher cipher = Cipher.getIn

相容JAVA的PHP加密解密DES演算法

今天一直折騰和JAVA對接資料加密解密的問題。 剛開始使用TEA的加密演算法,但是JAVA那邊和PHP端加密出來的結果不一樣 只能修改演算法,將演算法修改成了DES的加密演算法 但是PHP需要裝一個m

JAVA】常用加解密演算法總結及JAVA實現【BASE64,MD5,SHA,DES,3DES,AES,RSA】

BASE64 這其實是一種編解碼方法,但是隻要我們能夠將原文變成肉眼不可識別的內容,其實就是一種加密的方法。 BASE64 的編碼都是按字串長度,以每 3 個 8 bit 的字元為一組,然後針對每組,首先獲取每個字元的 ASCII 編碼,然後將 ASCII 編碼轉換成 8

C#DES加密,JavaDES解密,另轉C#和Java實現Des完整程式碼

<span style="font-family: Arial, Helvetica, sans-serif;">今天,由於開發需要C#做DES加密,Java做DES解密,在實現時有這樣一個問題:C#做DES有加密向量IV,Java常見方式是沒有的。在解密時需要