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

Java實現AES加密和解密

/**
     * @param content
     * @return String
     * @Description:解密流程: * 1.同加密1-4步
     * 2.將加密後的字串反紡成byte[]陣列
     * 3.將加密內容解密
     */
    public static String invokeDecryptEncode(String content) {
        String resultEncode = "";
        try {
            /**
             * //[1].利用KeyGenerator構造金鑰生成器,指定為AES演算法,不區分大小寫
             KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
             //[2].根據encryptEncodeRules規則初始化金鑰生成器,生成一個128位的隨機源,根據傳入的位元組陣列,實現隨機數演算法
             SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
             random.setSeed(encryptEncodeRules.getBytes());
             keyGenerator.init(128, random);
             //[3].產生原始對稱金鑰
             SecretKey originalKey = keyGenerator.generateKey();
             //[4].獲得原始對稱金鑰的位元組陣列
             byte[] rawByte = originalKey.getEncoded();
             //[5].根據位元組陣列生成AES金鑰
             SecretKey secretKey = new SecretKeySpec(rawByte, "AES");
             //[6].根據指定演算法AES自成密碼器
             Cipher cipher = Cipher.getInstance("AES");
             * 以上同加密流程
             */
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
            random.setSeed(encryptEncodeRules.getBytes());
            keyGenerator.init(128, random);
            SecretKey originalKey = keyGenerator.generateKey();
            byte[] byteArray = originalKey.getEncoded();
            SecretKey secretKey = new SecretKeySpec(byteArray, "AES");
            Cipher cipher = Cipher.getInstance("AES");
            //[7]將加密並編碼後的內容解碼成位元組陣列
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            //[8]解密密文
            byte[] byteContent = new BASE64Decoder().decodeBuffer(content);
            byte[] byteEncode = cipher.doFinal(byteContent);
            resultEncode = new String(byteEncode, "utf-8");
            return resultEncode;
        } catch (NoSuchAlgorithmException exception) {
            exception.printStackTrace();
        } catch (NoSuchPaddingException exception) {
            exception.printStackTrace();
        } catch (InvalidKeyException exception) {
            exception.printStackTrace();
        } catch (UnsupportedEncodingException exception) {
            exception.printStackTrace();
        } catch (IllegalBlockSizeException exception) {
            exception.printStackTrace();
        } catch (BadPaddingException exception) {
            exception.printStackTrace();
        } catch (IOException exception) {
            exception.printStackTrace();
        }
        return resultEncode;
    }

測試:

相關推薦

Java實現AES加密解密

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

java實現簡易加密解密

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

C#實現AES加密解密函式

AES簡介 AES(The Advanced Encryption Standard)是美國國家標準與技術研究所用於加密電子資料的規範。它被預期能成為人們公認的加密包括金融、電信和政府數字資訊的方法。 AES 是一個新的可以用於保護電子資料的加密演算法。明確地說,AES 是

Java實現Base64加密解密

Base64是一種編碼格式,而不是演算法。 首先引入Base64類庫的maven依賴 <dependency> <groupId>com.xiaoleilu</groupId> <

python 實現AES加密解密

aes port 加密算 偏移量 blog utf-8 加密和解密 sda return 參考 https://blog.csdn.net/zhchs2012/article/details/79032656 AES加密算法是一種對稱加密算法, 他有一個密匙, 即用來加密,

JavaScript前端Java後端的AES加密解密

proto creat eight prop pen 保持 超出範圍 system creator 在實際開發項目中,有些數據在前後端的傳輸過程中需要進行加密,那就需要保證前端和後端的加解密需要統一。這裏給大家簡單演示AES在JavaScript前端和Java後端是如何實現

java的對稱加密演算法 AES -----加密解密

背景 隨著對稱密碼的發展,DES資料加密標準演算法由於金鑰長度較小(56位),已經不適應當今分散式開放網路對資料加密安全性的要求,因此1997年NIST公開徵集新的資料加密標準,即AES[1]。經過三輪的篩選,比利時Joan Daeman和Vincent Rijmen提

jsjava中的AES加密解密

每次都要在這個問題上耗費一天的時間,所以這次留下記錄免得以後麻煩。 JS端使用CryptoJS,服務端bouncy castle提供的AES演算法。 AES演算法採用“AES/CBC/PKCS7Padding”,這個在JS和JAVA中都支援。Java預設的加

java實現AES加密解密

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

iOS開發-Objective-c的AES加密解密演算法的實現

話不多說,直接上程式碼 .h import <Foundation/Foundation.h> @interface LanAES : NSObject +(NSData *)AES256ParmEncryptWithKey:(NSString *

使用Python進行AES加密解密

Coding color www tor 修改 1年 add 思想 href 摘錄於:http://blog.csdn.net/nurke/article/details/77267081 另外參考:http://www.cnblogs.com/kaituorensheng

Java實現AES加密(轉)

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

phpjava中的加密解密

padding 而不是 bsp enc openss 解密 div des算法 -c 遇到的java代碼如下: Cipher cipher=Cipher.getInstance("DESede/CBC/PKCS5Padding"); 在php中使用des算法 始終校驗不

h5棋牌源碼租用Java的MD5加密解密

哈希函數 網絡問題 pri rgs update array 重要 和數 下載 理解MD5MD5的應用非常廣泛h5棋牌源碼租用(h5.hxforum.com)聯系170618633533企鵝2952777280(http://yhgj8004.com)源碼出售 房卡出售

VUE中的 AES加密解密

加密 pad aes加密 加密和解密 解密 如果 name con ase import CryptoJS from ‘crypto-js/crypto-js‘ // 默認的 KEY 與 iv 如果沒有給 const KEY = CryptoJS.enc.Utf8.pa

Java Base64位加密解密

edt .com 比較 兩個 word mis 表示 而且 .get 鏈接https://blog.csdn.net/longguangfu8/article/details/78948213 關於base64編碼Encode和Decode編碼的幾種方式 Base64是一種

Python進行AES加密解密

本文參考於部落格:http://www.cnblogs.com/kaituorensheng/p/4501128.html 高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這

Java的MD5加密解密

import java.security.*; import java.security.spec.*; class MD5_test { public final static String MD5(String s) {

golang實現DES加密解密

package main import ( "bytes" "crypto/des" "crypto/cipher" "fmt" ) func padding(src []byte,blocksize int) []byte { n:=len(src) pad

golang實現RSA加密解密

package main import ( "crypto/rsa" "crypto/rand" "crypto/x509" "encoding/pem" "os" "fmt" ) func rsaGenKey(bits int) error { priva