国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java | 使用Cipher類實(shí)現(xiàn)AES所有常用加密模式

這篇具有很好參考價(jià)值的文章主要介紹了java | 使用Cipher類實(shí)現(xiàn)AES所有常用加密模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.先看下介紹

AES 密碼學(xué)中的高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES),又稱Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES(Data Encryption Standard),已經(jīng)被多方分析且廣為全世界所使用。

AES 是對(duì)稱加密算法,優(yōu)點(diǎn):加密速度快;缺點(diǎn):如果秘鑰丟失,就容易解密密文,安全性相對(duì)比較差
對(duì)稱加密 : 也就是加密秘鑰和解密秘鑰是一樣的。
非對(duì)稱加密 : 也就是加密秘鑰和解密秘鑰是不一樣的。

2.廢話不多說(shuō),直接上代碼

2.1 自己定義的一個(gè)類,參數(shù)是AES加密模式,方便調(diào)用
    public static final String AESCBCNoPadding = "AES/CBC/NoPadding";
    public static final String AESCBCPKCS5Padding = "AES/CBC/PKCS5Padding(";
    public static final String AESECBNoPadding = "AES/ECB/NoPadding";
    public static final String AESECBPKCS5Padding = "AES/ECB/PKCS5Padding";
    public static final String DESCBCNoPadding = "DES/CBC/NoPadding";
    public static final String DESCBCPKCS5Padding = "DES/CBC/PKCS5Padding";
    public static final String DESECBNoPadding = "DES/ECB/NoPadding";
    public static final String DESECBPKCS5Padding = "DES/ECB/PKCS5Padding";
    public static final String DESedeCBCNoPadding = "DESede/CBC/NoPadding";
    public static final String DESedeCBCPKCS5Padding = "DESede/CBC/PKCS5Padding";
    public static final String DESedeECBNoPadding = "DESede/ECB/NoPadding";
    public static final String DESedeECBPKCS5Padding = "DESede/ECB/PKCS5Padding";
    public static final String RSAECBPKCS1Padding = "RSA/ECB/PKCS1Padding";
    public static final String RSAECBOAEPWithSHA_1AndMGF1Padding = "RSA/ECB/OAEPWithSHA-1AndMGF1Padding";
    public static final String RSAECBOAEPWithSHA_256AndMGF1Padding = "RSA/ECB/OAEPWithSHA-256AndMGF1Padding";

2.2 由于aes加密后的字節(jié)數(shù)組,直接轉(zhuǎn)String返回參數(shù)有可能存在亂碼,所以對(duì)返回值做一下處理,將加密的結(jié)果轉(zhuǎn)換為base64的字符串。同理,解密時(shí)候,需要把字符串先base64處理,再把解密后的內(nèi)容進(jìn)行aes解密操作。
也就是說(shuō)流程為:
加密(從前往后):明文 -> 加密 -> base64處理 -> 密文
解密(從后往前):明文 <- 解密 <- base64處理 <- 密文

/**
     * @param data 明文
     * @param key  密鑰,長(zhǎng)度16
     * @param iv   偏移量,長(zhǎng)度16
     * @return 密文
     * @Description AES算法加密明文
     */
    public static String AesEncrypt(String data, String key, String iv) {
        try {
        	//AES/CBC/NoPadding
            Cipher cipher = Cipher.getInstance(AESEnum.AESCBCNoPadding);
            int blockSize = cipher.getBlockSize();
            byte[] dataBytes = data.getBytes();
            int plaintextLength = dataBytes.length;
            if (plaintextLength % blockSize != 0) {
                plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
            }
            byte[] plaintext = new byte[plaintextLength];
            System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            // CBC模式,需要一個(gè)向量iv,可增加加密算法的強(qiáng)度
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());  
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(plaintext);
            // 加密后直接轉(zhuǎn)string可能亂碼,用BASE64做轉(zhuǎn)碼。
            return encode(encrypted).trim(); 
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * @param data 密文
     * @param key  密鑰,長(zhǎng)度16
     * @param iv   偏移量,長(zhǎng)度16
     * @return 明文
     * @Description AES算法解密
     */
    public static String AesDecrypt(String data, String key, String iv) {
        try {
        	//先用base64解密
            byte[] encrypted1 = decode(data);
            //AES/CBC/NoPadding 
            Cipher cipher = Cipher.getInstance(AESEnum.AESCBCNoPadding);
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
            byte[] original = cipher.doFinal(encrypted1);
            String originalString = new String(original);
            return originalString.trim();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 編碼
     *
     * @param byteArray
     * @return
     */
    public static String encode(byte[] byteArray) {
        return new String(new org.apache.commons.codec.binary.Base64().encode(byteArray));
    }

    /**
     * 解碼
     *
     * @param base64EncodedString
     * @return
     */
    public static byte[] decode(String base64EncodedString) {
        return new org.apache.commons.codec.binary.Base64().decode(base64EncodedString);
    }

用到的依賴

		<!--常用的加密解密方法-->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.15</version>
        </dependency>

測(cè)試結(jié)果:
沒(méi)一點(diǎn)問(wèn)題滴
java cipher,java,java,開(kāi)發(fā)語(yǔ)言,爬蟲(chóng),web安全文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-636303.html

到了這里,關(guān)于java | 使用Cipher類實(shí)現(xiàn)AES所有常用加密模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java實(shí)現(xiàn)AES加密工具類 - 簡(jiǎn)單易用的數(shù)據(jù)加密解決方案

    當(dāng)我們涉及到敏感數(shù)據(jù)的存儲(chǔ)和傳輸時(shí),數(shù)據(jù)加密是非常重要的。加密可以確保數(shù)據(jù)的保密性和完整性,并幫助我們防止數(shù)據(jù)泄露和攻擊。在Java中,使用標(biāo)準(zhǔn)的加密算法和庫(kù)可以很容易地實(shí)現(xiàn)數(shù)據(jù)加密和解密。本篇文章將介紹一個(gè)簡(jiǎn)單的Java工具類,該工具類使用AES對(duì)稱加密

    2024年02月11日
    瀏覽(46)
  • Java:SpringBoot使用AES對(duì)JSON數(shù)據(jù)加密和解密

    客戶端和服務(wù)端都可以加密和解密,使用base64進(jìn)行網(wǎng)絡(luò)傳輸 加密方 解密方 2.1、項(xiàng)目結(jié)構(gòu) 2.2、常規(guī)業(yè)務(wù)代碼 pom.xml Application.java WebMvcConfig.java CrossConfig.java JsonRequest.java JsonResult.java JsonResultVO.java IndexController.java UserController.java 2.3、加密的實(shí)現(xiàn) application.yml SecretData.java DecryptRequ

    2024年02月11日
    瀏覽(22)
  • 安全:AES算法及其加密模式

    AES(高級(jí)加密標(biāo)準(zhǔn))是一種對(duì)稱密鑰加密算法,被廣泛用于保護(hù)數(shù)據(jù)的機(jī)密性。 AES算法: 結(jié)構(gòu): AES算法使用替代(SubBytes)、置換(ShiftRows)、混淆(MixColumns)和輪密鑰加(AddRoundKey)等四種基本操作來(lái)處理數(shù)據(jù)塊。 密鑰長(zhǎng)度: AES支持128位、192位和256位三種密鑰長(zhǎng)度,分別

    2024年01月23日
    瀏覽(22)
  • 小程序AES加密ECB模式

    2024年02月09日
    瀏覽(26)
  • AES加密每種模式的優(yōu)缺點(diǎn)

    在AES加密中,常用的模式有ECB、CBC、CFB和OFB等。每種模式都有其優(yōu)缺點(diǎn),以下是每種模式的優(yōu)缺點(diǎn): 1.ECB模式(電子密碼本模式): 優(yōu)點(diǎn): 算法簡(jiǎn)單,加解密速度快。 易于并行計(jì)算,因此在硬件中實(shí)現(xiàn)時(shí)非常高效。 缺點(diǎn): 不支持并行加解密,因此安全性較差。 明文塊內(nèi)部

    2023年04月26日
    瀏覽(34)
  • 實(shí)現(xiàn) MyBatis-Plus 中的配置加密功能(使用 AES 算法)

    在項(xiàng)目開(kāi)發(fā)過(guò)程中,為了增強(qiáng)數(shù)據(jù)安全性,我們常常需要對(duì)敏感信息進(jìn)行加密處理。MyBatis-Plus 提供了方便的配置加密功能,使我們能夠?qū)ε渲梦募械拿舾行畔⑦M(jìn)行加密和解密操作。本文將詳細(xì)介紹如何實(shí)現(xiàn) MyBatis-Plus 中的配置加密功能,并給出相應(yīng)的代碼示例。 首先,我們

    2024年02月07日
    瀏覽(44)
  • php常用加密算法大全aes、3des、rsa等

    目錄 一、可解密加解密算法 1、aes 加解密算法 2、舊3des加解密方法 ?3、新3des加解密方法 4、rsa公私鑰加解密、簽名驗(yàn)簽方法 5、自定義加密算法1? 6、自定義加密算法2 7、自定義加密算法3 二、不可解密加密算法? 1、md5算法? 2、crypt算法 3、sha1算法 5、hash 算法 6、 password_ha

    2024年02月09日
    瀏覽(31)
  • java:AES加密和解密

    java:AES加密和解密

    1 前言 對(duì)稱加密,即單秘鑰加密,指加密和解密的過(guò)程中,使用相同的秘鑰,相比于非對(duì)稱加密,因僅有一把鑰匙,故而速度更快,更適合解密大文件(常見(jiàn)于如視頻文件的加密解密中)。AES算法就屬于對(duì)稱加密中的一種。 2 使用 依賴引入: AES加密與解密的工具類封裝: 執(zhí)

    2024年02月11日
    瀏覽(22)
  • 前端使用AES密碼加密、解密,使用詳細(xì)(crypto加密解密,前后端分離,AES加密解密)

    1、 首先安裝?crypto-js插件,安裝命令如下:? ? -S等同于--save,保存在package.json文件中,是在dependencies 下, --save安裝包信息將加入到dependencies(生產(chǎn)環(huán)境)中,生產(chǎn)階段的依賴,也就是項(xiàng)目運(yùn)行時(shí)的依賴,就是程序上線后仍然需要依賴; -D等同于--save-dev,也保存在package.j

    2024年02月11日
    瀏覽(23)
  • python實(shí)現(xiàn)AES加密

    目錄 1.AES加密 2.需要導(dǎo)入的模塊 3.定義好全局變量 4.編寫(xiě)加密函數(shù) 5.將密文解密 6.完整代碼 ? AES的區(qū)塊長(zhǎng)度固定為128 比特,密鑰長(zhǎng)度則可以是128,192或256比特; AES有多種加密模式,其中CBC分組模式是SSL、IPSec的標(biāo)準(zhǔn)。使用CBC加密模式時(shí)需要提前給出一段初始化向量iv,因?yàn)槊?/p>

    2023年04月08日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包