1. 程式人生 > >Java加密技術——對稱加密演算法一覽

Java加密技術——對稱加密演算法一覽

Java加密技術(二)——對稱加密演算法

   Java對稱加密演算法,最常用的莫過於DES資料加密演算法。 
DES 
Data Encryption Standard,即資料加密演算法。是IBM公司於1975年研究成功並公開發表的。DES演算法的入口引數有三個:Key、Data、Mode。其中Key為8個位元組共64位,是DES演算法的工作金鑰;Data也為8個位元組64位,是要被加密或被解密的資料;Mode為DES的工作方式,有兩種:加密或解密[Java程式碼就是2個常量]。 
  DES演算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的金鑰也是64位。 

DES演算法是這樣工作的:如Mode
為加密時,則用Key 去把資料Data進行加密, 生成Data的密碼形式(64位)作為DES的輸出結果;如Mode為解密,則用Key去把密碼形式的資料Data解密,還原為Data的明碼形式(64位)作為DES的輸出結果。在通訊網路的兩端,雙方約定一致的Key,在通訊的源點用Key對核心資料進行DES加密,然後以密碼形式在公共通訊網(如電話網)中傳輸到通訊網路的終點,資料到達目的地後,用同樣的Key對密碼資料進行解密,便再現了明碼形式的核心資料。這樣,便保證了核心資料(如PIN、MAC等)在公共通訊網中傳輸的安全性和可靠性。   通過定期在通訊網路的源端和目的端同時改用新的Key,便能更進一步提高資料的保密性,這正是現在金融交易網路的流行做法。

DES基本原則

DES設計中使用了分組密碼設計的兩個原則:混淆(confusion)和擴散(diffusion),其目的是抗擊敵手對密碼系統的統計分析。混淆是使密文的統計特性與金鑰的取值之間的關係儘可能複雜化,以使金鑰和明文以及密文之間的依賴性對密碼分析者來說是無法利用的。擴散的作用就是將每一位明文的影響儘可能迅速地作用到較多的輸出密文位中,以便在大量的密文中消除明文的統計結構,並且使每一位金鑰的影響儘可能迅速地擴充套件到較多的密文位中,以防對金鑰進行逐段破譯。

DES安全編碼元件

支援 DES、DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)

1、DES ----key size must be equal to 56

2、DESede(TripleDES) ----key size must be equal to 112 or 168

3、AES---- key size must be equal to 128, 192 or 256,but 192 and 256 bits may not be available

4、Blowfish---key size must be multiple of 8,andcan only range from 32 to 448 (inclusive)

5、RC2----key size must be between 40 and 1024 bits

6、RC4(ARCFOUR)---key size must be between 40 and 1024 bits

Java程式碼實現---例項

package com.ljh.password;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.KeyGenerator;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.SecretKey;

/**

 * DES[資料加密標準]--對稱加密

 * 只有一個金鑰

 * @author ljheee

 *

 */

public class DESencrypt extendsEncryptDecorator{

    static String ALGORITHM = “DES”;//此處指定不同演算法,可替換上面6種不同引數

    static SecretKey secretKey = null;

    static Cipher cipher = null;//Cipher類為加密和解密提供密碼功能

    public DESencrypt() {//空構造方法

    }

    static{//靜態程式碼塊--生成金鑰

        try {

            KeyGenerator keyGenerator =KeyGenerator.getInstance(ALGORITHM);

            keyGenerator.init(new SecureRandom());

            secretKey =keyGenerator.generateKey();//生成金鑰

            cipher = Cipher.getInstance(ALGORITHM);//獲得一個Cipher 例項,後面加密 、解密 需要用到 它提供的方法

        } catch(NoSuchAlgorithmException e) {

            e.printStackTrace();

        } catch(NoSuchPaddingException e) {

            e.printStackTrace();

        }

    }

    /**

     * DES--加密

     * @param data    源資料[待加密]

     * @return 加密後的byte[]陣列

     */

    public byte[] desEncrypt(byte[] data){

        byte[] result= null;

        try {

            cipher.init(Cipher.ENCRYPT_MODE, secretKey);//Cipher 初始化--指定處理模式 和完成處理所用的金鑰

            result = cipher.doFinal(data);

        } catch(InvalidKeyException e) {

            e.printStackTrace();

        } catch(IllegalBlockSizeException e) {

            e.printStackTrace();

        } catch(BadPaddingException e) {

            e.printStackTrace();

        }

        return result;

    }

    /**

     * DES--解密

     * @param data    源資料[待解密]

     * @return

     */

    public byte[] desDeEncrypt(byte[] data){

        byte[] result= null;

        try {

            cipher.init(Cipher.DECRYPT_MODE, secretKey);

            result = cipher.doFinal(data);

        } catch(InvalidKeyException e) {

            e.printStackTrace();

        } catch(IllegalBlockSizeException e) {

            e.printStackTrace();

        } catch(BadPaddingException e) {

            e.printStackTrace();

        }

        return result;

    }

    public static void main(String[] args) {

        DESencrypt des = new DESencrypt();

        byte[] str = null;

        str = des.desEncrypt("123456".getBytes());

        System.out.println(str);//輸出加密後的   資料

        System.out.println(new String(des.desDeEncrypt(str)));//輸出解密後的資料

    }

}

輸出結果:

加密後的 資料:[[email protected]

123456

由控制檯得到的輸出,我們能夠比對加密、解密後結果一致,都是原始123456。這是一種簡單的加密解密方式,只有一個金鑰。 
 其實DES有很多同胞兄弟,如DESede(TripleDES)、AES、Blowfish、RC2、RC4(ARCFOUR)。使用方式大同小異,只要換掉ALGORITHM換成對應的值;此外就是他們的不同之處--金鑰長度不同了。 

       DES演算法具有極高安全性,到目前為止,除了用窮舉搜尋法對DES演算法進行攻擊外,還沒有發現更有效的辦法。而56位長的金鑰的窮舉空間為256,這意味著如果一臺計算機的速度是每一秒種檢測一百萬個金鑰,則它搜尋完全部金鑰就需要將近2285年的時間,可見,這是難以實現的,當然,隨著科學技術的發展,當出現超高速計算機後,我們可考慮把DES金鑰的長度再增長一些,以此來達到更高的保密程度。 

相關推薦

Java加密技術——對稱加密演算法一覽

Java加密技術(二)——對稱加密演算法    Java對稱加密演算法,最常用的莫過於DES資料加密演算法。 DES  Data Encryption Standard,即資料加密演算法。是IBM公司

JAVA實現RSA加密,非對稱加密演算法

RSA.java package org.icesnow.jeasywx.util.security; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair;

Java 加密解密 對稱加密演算法對稱加密演算法 MD5 BASE64 AES RSA

【前言】 本文簡單的介紹了加密技術相關概念,最後總結了java中現有的加密技術以及使用方法和例子 【最簡單的加密】1.簡單的概念 明文:加密前的資訊 密文:機密後的資訊 演算法:加密或解密的演算法 金鑰:演算法使用的鑰匙(讀作miyao,正確應該是miyue,但是大家都讀m

Java 加密 AES 對稱加密演算法

【AES】 一種對稱加密演算法,DES的取代者。 【程式碼】 程式碼比較多,有一部分非本文章內容程式碼,具體自己看吧。 package com.uikoo9.util.encrypt; import java.math.BigInteger; import java

資料傳輸加密——非對稱加密演算法RSA+對稱演算法AES(適用於java,android和Web)

本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 資料傳輸加密   在開發應用過程中,客戶端與服務端經常需要進行資料傳輸,涉及到重要隱私資訊時,開發者自然會想到對其進行加密,即使傳輸過程中被“有心人”擷取,也不會將資訊洩露。對於加密

Java進階 八 Java加密技術對稱加密對稱加密 不可逆加密算法

歐洲 再次 div 數據安全 識別 交易 standard 計算 領域 對稱加密 非對稱加密 不可逆加密算法 根據密鑰類型不同可以將現代密碼技術分為兩類:對稱加密算法(私鑰密碼體系)和非對稱加密算法(公鑰密碼體系)。 1 對稱加密算法 原理 對稱加密算法中,數據

加密技術加密演算法AES在資訊保安中的應用

隨著網路資訊科技的迅猛發展,網路資料加密的要求也日益提高,AES的應用首先體現在網路資訊保安領域中,以下四點就能很好的證明AES加密演算法的廣泛應用。 1. 無線 網路應用由於無線網路的通訊通道較有線網路更為開放,安全性的要求更高。目前,無線網路主要有兩個標準 :一是用於 WLAN的IEEE803.11協議

加密技術加密演算法的分類

為了滿足資訊保安中的不同需要,產生了特點各異的加密演算法。按照加密時對明文的處理方式,密碼演算法可分為序列密碼和分組密碼演算法.序列密碼演算法是對明文訊息按字元逐位進行處理,它利用少量的金鑰通過某種複雜的運算產生大量的偽隨機位流,用於對明文位流的加密;金鑰在每次

對稱加密對稱加密 不可逆加密演算法

根據金鑰型別不同可以將現代密碼技術分為兩類:對稱加密演算法(私鑰密碼體系)和非對稱加密演算法(公鑰密碼體系)。 1 對稱加密演算法中,資料加密和解密採用的都是同一個金鑰,因而其安全性依賴於所持有金鑰的安全性。 對稱加密演算法的主要優點是加密和解密速度快,加密強度高,且演算法公開. 缺點是實現金鑰的祕密分發困

程式設計師之網路安全系列(三):資料加密對稱加密演算法

系列目錄: 前文回顧 假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去 如何保證隔壁老王不能看到情書內容?(保密性) 如何保證隔壁老王不修改情書的內容?(完整性) 如何保證隔壁老王不冒充明明?(身份認證) 如何保證明明不能否認情書是自己寫的?(來源的不可否認) 上一節,我們使用了Ha

對稱加密/非對稱加密/簽名演算法

對稱加密: 對稱加密是指,加密方和解密方使用同樣的祕鑰來進行加密和解密。 常用對稱加密: 1. DES演算法 DES演算法的入口引數有三個:Key、Data、Mode。其中Key為8個位元組共64位,是DES演算法的工作金鑰;Data也為8個位元組64位,是要被加密或被

【密碼學筆記】傳統加密技術——對稱密碼模型

傳統加密技術 對稱密碼模型 5個基本成分: 明文:原始的訊息或資料,既演算法的輸入。 加密演算法:對明文進行各種代替和替換。 金鑰:獨立於明文和演算法,也是加密演算法的輸入。演算法根據所用的

JAVA RSA非對稱加密詳解

 原文:原文地址 package com.rsa; import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.*; import jav

如何使用gpg工具實現公鑰加密對稱加密和非對稱加密)?

gpg工具 對稱加密 公鑰加密 非對稱加密 使用gpg實現公鑰加密【對稱加密】1、 對稱加密file文件gpg -c filels file.gpg------------------------對稱加密過程------------------------輸入口令,兩次,例如centos再查看

[svc]對稱加密/非對稱加密細枝末節-如何做到數據傳輸的authentication/data integrity/confidentiality(私密)

ecc 數據完整性 安全 post 數字簽名 .html 模式 數字證書 大量 對稱/非對稱/混合加密的冷知識 數據在互聯網上傳輸,要考慮安全性. 講到安全,要從三方面考慮: 1、authentication 每一個IP包的認證,確保合法源的數據 2、data integ

加密技術加密算法AES在信息安全中的應用

密鑰 私人 ssl 獲得 人的 開發 設備 領域 因此 隨著網絡信息技術的迅猛發展,網絡數據加密的要求也日益提高,AES的應用首先體現在網絡信息安全領域中,以下四點就能很好的證明AES加密算法的廣泛應用。 1. 無線 網絡應用由於無線網絡的通信信道較有線網絡更為開放,安全性

什麼是非對稱加密?非對稱加密概念

什麼是非對稱加密 對稱加密演算法在加密和解密時使用的是同一個祕鑰;而非對稱加密演算法需要兩個金鑰來進行加密和解密,這兩個祕鑰是公開金鑰(public key,簡稱公鑰)和私有金鑰(private key,簡稱私鑰)   與對稱加密演算法不同,非對稱加密演算法需要兩個金鑰:

Https的加密過程 / 對稱加密和非對稱加密

Https和Http區別 WEB服務存在http和https兩種通訊方式,http預設採用80作為通訊埠,對於傳輸採用不加密的方式,https預設採用443,對於傳輸的資料進行加密傳輸 目前主流的網站基本上開始預設採用HTTPS作為通訊方式,一切的考慮都基於對安全的要求,那麼如何對自己的網站

[svc]openssl對稱加密,非對稱加密最佳實戰

 OpenSSL進行aes加密解密-對稱加密 建立檔案test.txt, 特意寫入中英文 # cd /tmp # echo "test測試" > test.txt 開始加密, 使用aes-128-cbc演算法, 也可以使用其他演算法

理論:HTTPS,TLS,SSL,TCP,UDP,對稱加密,非對稱加密

HTTP:傳輸web內容的協議,軟水管(公開透明) TLS/SSL:不鏽鋼管 HTTPS:HTTP套上SSL,軟水管套上不鏽鋼管 TCP:傳輸層協議,HTTP基於TCP,面向連線 UDP:傳輸層協議,先傳不一定先到,面向非連線 對稱加密:加密和解密使用