AES加密算法-128位高安全,高速度

網上資料顯示,下一代加密技術會圍繞着AES技術進行。初出茅廬,學習編寫了加密代碼,以下所示java

package com.bao.tools.encryption;

import java.security.SecureRandom;
import java.util.Scanner;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import org.junit.Test;

/**
 * @title AES加密解密算法
 * @description 高級加密標準,對稱算法,是下一代的加密算法標準,速度快,安全級別高,如今 AES 標準的一個實現是 Rijndael 算法
 * @author Administrator
 * @date 2015-7-16
 */
public class CAES {
    
    /**
     *
     * @param key(生成鍵字符串)
     * @param value(加密的文字字符串)
     * @param mode
     *            (true:加密;false:解密)
     * @return
     */
    public static byte[] setEncrypted(String key, byte[] value, boolean mode)throws Exception {
        if (key == null || value == null)
            return null;
        // --------- 生成密碼鍵
        // 建立AES通用鍵模式
        KeyGenerator generator = KeyGenerator.getInstance("AES");
        // 初始化通用鍵(256位,建立隨機編碼鍵)
        generator.init(128, new SecureRandom(key.getBytes("UTF-8")));
        // 建立安全鍵實例
        SecretKey keys = generator.generateKey();
        // 建立密匙規範的實例
        SecretKeySpec keySpec = new SecretKeySpec(keys.getEncoded(), "AES");

        // ----------開始加密/解密內容
        Cipher cipher = Cipher.getInstance("AES");// 建立AES內容加密實例
        if (mode) {
            cipher.init(Cipher.ENCRYPT_MODE, keySpec);// 加密
        } else {
            cipher.init(Cipher.DECRYPT_MODE, keySpec);// 解密
        }
        byte[] result = cipher.doFinal(value);
        return result;//注意:返回必定是byte數組,不然報 16位字節異常 !
    }

    /*
     * 測試
     */
    @Test
    public void test() throws Exception {
        Scanner scanner = new Scanner(System.in);
        System.out.println("-----------AES安全加密測試-------------\n請輸入主鍵(字符串):");
        String key = scanner.nextLine();
        System.out.println("請輸入要加密的內容:");
        String value=scanner.nextLine();
        System.out.println("---------運行結果-----------");
        
        //若是要求安全係數更高且暫時不用解密,能夠使用BASE64編碼後再進行AES加密
//        value = CBase64.setEncrypted(value);
        
        byte[] message = setEncrypted(key, value.getBytes(), true);//執行加密方法
        System.out.println("------加密字符爲:"+new String(message));//在這裏將字節數組轉換爲字符串顯示出來
                
        System.out.println("+++++++解 密 :"+new String(setEncrypted(key, message, false)));
        
        scanner.close();
    }
}
運行結果:算法

註明:網上找的資料,搞了大半個晚上才發現,byte存取很重要,否則會報16倍數字節異常 !數組

相關文章
相關標籤/搜索