大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java AES加密解密示例

Java AES加密解密示例

更新時間:2022-06-28 10:37:46 來源:動力節點 瀏覽1742次

Java加密和解密的方式有很多,但有不少小伙伴不清楚Java AES加密解密是什么,下面就由動力節點小編來告訴大家。

介紹

AES代表高級加密標準,是加密敏感數據最常用的對稱算法,可用于軟件和硬件。

AES算法是對稱的,這意味著它只使用一個密鑰進行加密和解密,由于這個原因,密鑰必須在發送方和接收方之間共享。

該標準具有三種密鑰大小,包括128、192和 ,256并且每個密碼都以位塊的形式加密和解密數據128。

密鑰大小分別對 、 和 的數據執行、和10輪12次14,從而使它們之間的算法更強。128192256256

默認情況下,AES 算法的 java 實現使用128密鑰大小,在本教程中,我們將實現該算法來加密和解密消息。

生成共享密鑰

為了生成用于加密和解密消息的密鑰,我們將使用javagetInstance()中類的方法KeyGenerator并將字符串傳遞AES給該方法。

如果沒有提供程序支持指定算法的 a 和如果提供的算法是,則該getInstance()方法拋出一個。NoSuchAlgorithmExceptionKeyGeneratorSpiNullPointerExceptionnull

這KeyGenerator將創建一個 AES 算法的實例,我們將使用該算法使用generateKey()類的方法生成密鑰。

這個類生成一個對稱密鑰,一旦生成了一個密鑰,同一個對象就可以用來創建其他密鑰。

使用 的encodeToString()方法Base64.Encoder通過將結果記錄到控制臺來查看生成的密鑰字符串。

package com.encryption; 
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class AESEncryption {
    public static void main(String[] args) throws NoSuchAlgorithmException { 
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        SecretKey secretKey = keyGenerator.generateKey();
        String secretKeyString =
        Base64.getEncoder().encodeToString(secretKey.getEncoded());
        System.out.println("generated key = "+secretKeyString); 
    }
}

輸出:

生成的密鑰 = JPZJ7ut162hnlpFh2Cbg2w==

加密隨機文本

要加密消息,請創建一個Cipher對象并使用getInstance()with 參數AES/CBC/PKCS5Padding作為轉換來創建算法的實例。

轉換有模式和填充,在我們的例子中,我們將使用CBC模式,它代表密碼塊鏈接,并PKCS5Padding作為填充。

默認模式是ECB,但由于它不支持多個數據塊,我們將使用CBC,這是塊密碼的一種操作模式。

密碼塊鏈接模式使用初始化向量,也稱為IV,它是用于提供初始狀態的密碼算法的輸入,并且要求是唯一的。

算法中引入了填充,因此如果要加密的字符串不是塊大小的精確倍數,則在加密之前通過添加填充字符串來完成填充。

因為我們將為創建類的init()方法提供一個初始化向量,并將密鑰字節傳遞給它的構造函數,用作初始化向量。CipherIvParameterSpec

調用init()方法并通過Cipher.ENCRYPT_MODE,SecretKey最后IvParameterSpec創建對象。

創建一個隨機文本并調用 的doFinal()方法Cipher并將消息字節傳遞給該方法以執行加密。

該doFinal()方法返回一個包含加密消息的字節數組,我們可以使用該encodeToString()方法將字節轉換為字符串并將其內容記錄到控制臺以驗證加密是否成功。

package com.encryption; 
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64; 
public class AESEncryption {
    public static void main(String[] args) throws
            NoSuchAlgorithmException, NoSuchPaddingException,
            InvalidKeyException, IllegalBlockSizeException,
            BadPaddingException, InvalidAlgorithmParameterException { 
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        SecretKey secretKey = keyGenerator.generateKey();
        String secretKeyString =
        Base64.getEncoder().encodeToString(secretKey.getEncoded());
        System.out.println("generated key = "+secretKeyString); 
        //Encrypt Hello world message
        Cipher encryptionCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        byte[] InitVectorBytes = keyGenerator.generateKey().getEncoded();
        IvParameterSpec parameterSpec = new IvParameterSpec(InitVectorBytes);
        encryptionCipher.init(Cipher.ENCRYPT_MODE,secretKey,parameterSpec);
        String message = "Hello world";
        byte[] encryptedMessageBytes =
        encryptionCipher.doFinal(message.getBytes());
        String encryptedMessage =
        Base64.getEncoder().encodeToString(encryptedMessageBytes);
        System.out.println("Encrypted message = "+encryptedMessage); 
    }
}

輸出:

生成的密鑰 = hSJcGUPIj4T4DbncAjes5w==
加密消息 = /PLOtvd+J/7KLGOdPaVZtg==

解密加密文本

由于我們已經有了一個初始化向量和一個密鑰,我們需要Cipher像之前一樣創建一個新對象,并在方法中使用AES/CBC/PKCS5Padding轉換。getInstance()

該init()方法唯一改變的參數是我們執行解密操作時的模式,我們需要Cipher.DECRYPT_MODE作為該方法的第一個參數傳遞。

通過將返回的結果傳遞給構造函數并將該方法返回的字節轉換為doFinal()字符串String()并登錄到控制臺以驗證解密的消息是我們的原始消息。

package org.arpit.java2blog; 
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class AESEncryption {
    public static void main(String[] args) throws
            NoSuchAlgorithmException, NoSuchPaddingException,
            InvalidKeyException, IllegalBlockSizeException,
            BadPaddingException, InvalidAlgorithmParameterException {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        SecretKey secretKey = keyGenerator.generateKey();
        String secretKeyString =
        Base64.getEncoder().encodeToString(secretKey.getEncoded());
        System.out.println("generated key = "+secretKeyString); 
        //Encrypt Hello world message
        Cipher encryptionCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        byte[] InitVectorBytes = keyGenerator.generateKey().getEncoded();
        IvParameterSpec parameterSpec = new IvParameterSpec(InitVectorBytes);
        encryptionCipher.init(Cipher.ENCRYPT_MODE,secretKey,parameterSpec);
        String message = "Hello world";
        byte[] encryptedMessageBytes =
        encryptionCipher.doFinal(message.getBytes());
        String encryptedMessage =
        Base64.getEncoder().encodeToString(encryptedMessageBytes);
        System.out.println("Encrypted message = "+encryptedMessage); 
        //Decrypt the encrypted message
        Cipher decryptionCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        decryptionCipher.init(Cipher.DECRYPT_MODE,secretKey,parameterSpec);
        byte[] decryptedMessageBytes =
        decryptionCipher.doFinal(encryptedMessageBytes);
        String decryptedMessage = new String(decryptedMessageBytes);
        System.out.println("decrypted message ="+decryptedMessage); 
    }
}

輸出:

生成的密鑰 = hSJcGUPIj4T4DbncAjes5w==
加密消息 = /PLOtvd+J/7KLGOdPaVZtg==
解密消息=Hello world

以上就是關于“Java AES加密解密示例”介紹,大家如果想了解更多相關知識,可以關注一下動力節點的Java視頻教程,里面的課程內容從入門到精通,細致全面,通俗易懂,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 激情综合网色播五月 | 88国产精品欧美一区二区三区 | 亚洲图片欧美日韩 | 国产一级高清视频 | 久久涩综合 | 亚洲欧美日韩精品高清 | 中国大陆一级毛片 免费 | 久久久国产精品免费看 | 国产精品久久久久一区二区三区 | 99er这里只有精品 | 毛片真人毛毛片毛片 | 亚洲影院中文字幕 | 国产亚洲精品久久久久久无 | 国产一级久久免费特黄 | 色视频在线免费 | 一级特黄aa大片一又好看 | 国产午夜精品视频 | 日韩久久精品一区二区三区 | 五月月色开心婷婷久久合 | 黑人超长巨大xxxxxxx视频 | 久久国产精品久久久久久小说 | 四虎在线精品观看免费 | 不卡一区二区在线 | 99久久精品免费看国产高清 | 9久热久re爱免费精品视频 | 国产成a人亚洲精v品久久网 | 天天天天天操 | 国产日产欧产美一二三区 | 最新亚洲精品国自产在线观看 | 福利在线视频一区热舞 | 久青草国产在线视频亚瑟影视 | 亚洲韩国日本一级二级r级 亚洲韩精品欧美一区二区三区 | 兽王高清完整在线观看 | 亚洲综合色区图片区 | 97人人看| 毛片免费观看的视频 | 四虎最新影院 | 香蕉久热 | 黑人巨大vs日本妞 | 五月天中文字幕 | 色婷婷综合欧美成人 |