黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

Java AES加密解密示例

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

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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 在线成人观看 | 色狠狠色综合久久8狠狠色 色狠狠成人综合网 | 日本啪啪动漫 | 日韩视频精品 | 日韩视频精品 | 一级一级一片免费 | 天天干天天做天天射 | 日本videos18高清hd下 | 欧美性与交视频在线观看 | 欧美一a一片一级一片 | 国产精品人成 | 久久精品国产精品亚洲综合 | 中文字幕欧美在线观看 | 中文亚洲日韩欧美 | 飘花国产午夜精品不卡 | 国产黄视频网站 | 日本黄色激情 | 日韩美女视频在线 | 在线观看精品福利片香蕉 | 国产成人精品精品欧美 | 男女后进式猛烈xx00动态图片 | 日本高清在线观看天码888 | 九九久久国产精品免费热6 九九久久亚洲综合久久久 九九伦理 | 二级黄色毛片 | 免费人成在线看 | 成人亚洲综合 | 中文成人在线 | 好吊日在线| 男女做www免费高清视频 | xxxx性bbbb| 日韩妞干网 | 国产精品国产三级在线高清观看 | 欧美日韩不卡在线 | 播放一级特黄录像 | 九九99在线视频 | 黄网站免费视频 | 国产剧情一区二区三区 | 大象焦伊人久久综合网色视 | 日本综合久久 | 成人网18免费网站在线 | 一级一级 a爱片免费视频 |