1. 程式人生 > >Java實現AES加密

Java實現AES加密

一、什麼是AES?

AES:Advanced Encrypt Standard 高階加密標準。使用AES是為了代替原先的DES,現如今已被廣泛使用。

相較於DES,使用56位祕鑰,比較容易被破解。AES可以使用128、192和256位祕鑰,並且使用128位分組加密和解密資料,安全很多。完善的加密演算法在理論上幾乎是不可被破解的,除非使用窮盡法。但使用窮盡法破解祕鑰長度在128位以上的加密資料是不現實的,即使採用世界上最快的計算機,窮盡128位祕鑰也要花上幾十億年的時間。

AES是對稱加密演算法,因為加密和解密的金鑰是同一個。

二、AES加密

Java對各種加密解密演算法都已經有了很好的封裝,我們需要做的只是引入現有的方法即可。

    /**
     * AES加密字串
     * 
     * @param content    需要被加密的字串
     * @param password   加密需要的密碼
     * @return 密文
     */
    public static byte[] encrypt(String content, String password) {
        try {
            // 建立AES的Key生產者
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            
            // 利用使用者密碼作為隨機數初始化出128位的key生產者
            // SecureRandom是生成安全隨機數序列,password.getBytes()是種子,
            // 只要種子相同,序列就一樣,所以解密只要有password就行
            kgen.init(128, new SecureRandom(password.getBytes()));
            
            // 根據使用者密碼,生成一個金鑰
            SecretKey secretKey = kgen.generateKey();

            // 返回基本編碼格式的金鑰,如果此金鑰不支援編碼,則返回
            byte[] enCodeFormat = secretKey.getEncoded();

            // 轉換為AES專用金鑰
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

            // 建立密碼器
            Cipher cipher = Cipher.getInstance("AES");

            byte[] byteContent = content.getBytes("utf-8");

            // 初始化為加密模式的密碼器
            cipher.init(Cipher.ENCRYPT_MODE, key);

            // 加密
            byte[] result = cipher.doFinal(byteContent);

            return result;

        } catch (NoSuchPaddingException | NoSuchAlgorithmException | 
        UnsupportedEncodingException | InvalidKeyException | 
        IllegalBlockSizeException |     BadPaddingException e) {
            e.printStackTrace();
        } 
        return null;
    }

三、AES解密

其實加密解密,簡單說就是cipher初始化的模式,加密就是ENCRYPT_MODE、解密就是DECRYPT_MODE

    /**
     * 解密AES加密過的字串
     * 
     * @param content    AES加密過過的內容
     * @param password   加密時的密碼
     * @return 明文
     */
    public static byte[] decrypt(byte[] content, String password) {
        try {
        	// 建立AES的Key生產者  這些與加密時保持一致
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, new SecureRandom(password.getBytes()));
            
            // 根據使用者密碼,生成一個金鑰
            SecretKey secretKey = kgen.generateKey();
            
            // 返回基本編碼格式的金鑰
            byte[] enCodeFormat = secretKey.getEncoded();
            
            // 轉換為AES專用金鑰
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            
            // 建立密碼器
            Cipher cipher = Cipher.getInstance("AES");
            
            // 初始化為解密模式的密碼器
            cipher.init(Cipher.DECRYPT_MODE, key);
            
            // 返回明文   
            byte[] result = cipher.doFinal(content);  
            return result; 
            
        } catch (NoSuchAlgorithmException | NoSuchPaddingException | 
        		InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }

四、測試程式碼

	public static void main(String[] args) {
		String content = "測試 hello world";
        String password = "123456";
        System.out.println("加密之前:" + content);

        // 加密
        byte[] encrypt = encrypt(content, password);
        System.out.println("加密後的內容:" + new String(encrypt));
        
        // 解密
        byte[] decrypt = decrypt(encrypt, password);
        System.out.println("解密後的內容:" + new String(decrypt));  
	}
加密之前:測試 hello world
加密後的內容:��k8����
解密後的內容:測試 hello world

加密之後的內容是亂碼,可以通過進位制轉換轉為16進位制進行正常顯示。

相關推薦

Java實現AES加密(轉)

密鑰 工具 mex 嚴格 keys 生產 ner for 創建 一)什麽是AES? 高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),是一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。 那麽為什麽

JAVA 實現AES加密的兩種方法

寫在前面的話:    1.建議加密後將密文轉為16進位制的字串(便於觀看)。    2.以下的兩種加密的方法金鑰不限定長度。[java] view plain copy print?/**  *AES加密解密工具類  *@author M-Y  */  public clas

Java實現AES加密和解密

/** * @param content * @return String * @Description:解密流程: * 1.同加密1-4步 * 2.將加密後的字串反紡成byte[]陣列 * 3.將加密內容解密 */ public stati

Java實現AES加密

一、什麼是AES? AES:Advanced Encrypt Standard 高階加密標準。使用AES是為了代替原先的DES,現如今已被廣泛使用。 相較於DES,使用56位祕鑰,比較容易被破解。AES可以使用128、192和256位祕鑰,並且使用128位分組加密和解密資

java實現AES加密解密

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

Java實現AES加密,異常java.security.InvalidKeyException: Illegal key size 的解決

sta extension ons jdk mit jar文件 目錄 jdk7 ase Java實現AES加密,拋出異常如下:java.security.InvalidKeyException: Illegal key size 代碼參考 http://my.oschi

java實現AES方式加密

AES加密import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingE

java實現AES的簡單加密解密

AESUtil package com.zhuyun.aes; import java.io.IOException; import javax.crypto.Cipher; import ja

java和js實現aes加密解密

由於公司安全測試,要對重要資訊進行加密傳輸,使得java、android、ios一致。 java程式碼 package gov.communitycloud.user.utils; import java.math.BigInteger; import javax.cr

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

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

【工具類】Java實現AES演算法 加密和解密

最近在學AES加密,通過網上學習查詢資料,封裝了一個AES加密解密工具類,說幾點: 演算法/模式/填充,這個最好使用"AES/CBC/PKCS5Padding","ECB"在IOS中不安全(網上查詢資料得知),不要使用預設填充引數金鑰要使用16位,不使用"AES/CBC/

aNDROID實現aEs加密技術

android java .com and androi aid ava lis 加密 JaVa%E9%9D%A2%E8%AF%95%E7%AC%94%E8%AF%95%E9%A2%98%E5%A4%A7%E6%B1%87%E6%80%BB%282%29 http://m

C# 實現AES加密--解密

bsp 密文 rem adding gets manage string sys cipher /// <summary> /// AES 加密 /// </summary> ///

JAVA實現DES加密實現詳解

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

java實現md5加密

comm 代碼 inf 應用領域 ast center href 攻擊 字符串

**Java實現Base64加密**

package com.beiruan.test; import org.apache.commons.codec.binary.Base64; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public clas

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

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

CTR分組模式實現AES加密解密(go語言)

版權宣告:本文為作者原創,如需轉載,請註明出處 https://blog.csdn.net/weixin_42940826 AES演算法簡介 AES演算法是為了取代DES演算法而生,雖然3DES演算法仍然可以使用,但是效率比較低下,AES演算法是在眾多演算法中選拔

java實現AES&MD5加解密

AES: import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.bin

java實現簡易加密和解密

實現原理:               通過位運算的異或運算子“^”把字串與一個指定的值進行異或運算,從而改變字串中的每個字元的值,這樣就可以得到一個加密後的字串。傳送後再將加密後的字串通過源程式實現解