大战熟女丰满人妻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視頻教程,里面的課程內容從入門到精通,細致全面,通俗易懂,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日本中文字幕永久在线 | 亚洲高清在线视频 | 国产乱码精品一区二区三区四川 | 狠狠激情| 天天操夜 | 亚洲视频不卡 | 免费国产不卡午夜福在线 | www亚洲精品| 欧美日韩视频在线播放 | 国产草草 | 亚洲精品久久久久影 | 国产成人精品一区二区三在线观看 | 搡的我好爽视频在线观看 | 人与禽交免费网站视频 | 五月婷婷欧美 | 91亚洲精品一区二区在线观看 | 美国免费三片在线观看 | 久久高清一区二区三区 | 日本在线小视频 | 久久视频在线观看免费 | 欧美日韩国产超高清免费看片 | 理论片我不卡在线观看 | 国产欧美精品专区一区二区 | 91在线视频在线 | 橘梨纱视频一区二区在线观看 | 免费久久精品 | 国产欧美一区二区精品性色 | 四虎精品久久 | 五月伊人 | 亚洲欧洲精品国产区 | 久久久这里只有免费精品2018 | 国产一区二区三区在线视频 | 看免费5xxaaa毛片30厘米 | 久久福利青草精品资源站免费 | 欧美午夜精品一区二区三区 | 国产精品视频色拍拍 | 青青青免费手机版视频在线观看 | 日韩伊人网 | 成人免费视频视频在线不卡 | 亚洲国产女人aaa毛片在线 | 在线看亚洲 |