最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中常用文本加解密工具類總結(jié)

 更新時(shí)間:2024年11月15日 08:21:34   作者:一線大碼  
這篇文章主要為大家詳細(xì)介紹了Java中常用的幾種文本加解密工具類,包括AES對(duì)稱加密、RSA非對(duì)稱加密、哈希算法加密和Base64編解碼,需要的可以參考下

1. AES 對(duì)稱加解密

package com.example.demo.util;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

/**
 * AES對(duì)稱加密
 *
 * @author wangbo
 * @date 2024/11/14
 */
public class AesUtil {

    private AesUtil() {
    }

    /**
     * 生成AES密鑰
     *
     * @param password 加密密碼
     * @return 密鑰
     * @throws NoSuchAlgorithmException 密鑰生成算法不支持異常
     */
    private static SecretKey generateAesKey(String password) throws NoSuchAlgorithmException {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);
        byte[] passwordBytes = password.getBytes(StandardCharsets.UTF_8);
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] keyBytes = digest.digest(passwordBytes);
        return new SecretKeySpec(keyBytes, "AES");
    }

    /**
     * 對(duì)稱加密算法AES加密
     *
     * @param plaintext 待加密文本
     * @param password  加密密碼
     * @return 加密后的密文
     * @throws Exception 加密異常
     */
    public static String encryptWithAes(String plaintext, String password) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        SecretKey secretKey = generateAesKey(password);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    /**
     * 對(duì)稱加密算法AES解密
     *
     * @param ciphertext 加密后的密文
     * @param password   加密密碼
     * @return 解密后的明文
     * @throws Exception 解密異常
     */
    public static String decryptWithAes(String ciphertext, String password) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        SecretKey secretKey = generateAesKey(password);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(ciphertext));
        return new String(decryptedBytes, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) throws Exception {
        // AES 對(duì)稱加密示例
        String plaintext = "Hello, world!";
        String password = "secretPassword";
        // AES 加密
        String encryptWithAes = encryptWithAes(plaintext, password);
        System.out.println("AES Encrypted: " + encryptWithAes);
        // AES 解密
        String decryptWithAes = decryptWithAes(encryptWithAes, password);
        System.out.println("AES Decrypted: " + decryptWithAes);
    }
}

2. RSA 非對(duì)稱加解密

package com.example.demo.util;

import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;

/**
 * RSA非對(duì)稱加密
 *
 * @author wangbo
 * @date 2024/11/14
 */
public class RsaUtil {

    private RsaUtil() {
    }

    /**
     * 生成RSA密鑰對(duì)
     *
     * @return 密鑰對(duì)
     * @throws NoSuchAlgorithmException 密鑰生成算法不支持異常
     */
    public static KeyPair generateRsaKeyPair() throws NoSuchAlgorithmException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);
        return keyPairGenerator.generateKeyPair();
    }

    /**
     * 獲取RSA公鑰的Base64編碼字符串
     *
     * @return RSA公鑰Base64編碼字符串
     */
    public static String getRsaPublicKeyString(PublicKey publicKey) {
        KeyFactory keyFactory;
        try {
            keyFactory = KeyFactory.getInstance("RSA");
            X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKey.getEncoded());
            return Base64.getEncoder().encodeToString(keyFactory.generatePublic(publicKeySpec).getEncoded());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 根據(jù)Base64編碼的字符串還原為RSA公鑰
     *
     * @param publicKeyString RSA公鑰Base64編碼字符串
     * @return RSA公鑰
     */
    public static PublicKey getPublicKey(String publicKeyString) {
        try {
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyString));
            return keyFactory.generatePublic(publicKeySpec);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 獲取RSA私鑰的Base64編碼字符串
     *
     * @return RSA私鑰Base64編碼字符串
     */
    public static String getRsaPrivateKeyString(PrivateKey privateKey) {
        KeyFactory keyFactory;
        try {
            keyFactory = KeyFactory.getInstance("RSA");
            PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKey.getEncoded());
            return Base64.getEncoder().encodeToString(keyFactory.generatePrivate(privateKeySpec).getEncoded());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 根據(jù)Base64編碼的字符串還原為RSA私鑰
     *
     * @param privateKeyString RSA私鑰Base64編碼字符串
     * @return RSA私鑰
     */
    public static PrivateKey getPrivateKey(String privateKeyString) {
        try {
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyString));
            return keyFactory.generatePrivate(privateKeySpec);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 非對(duì)稱加密算法RSA加密
     *
     * @param plaintext 明文
     * @param publicKey 公鑰
     * @return 加密后的密文
     * @throws Exception 加密異常
     */
    public static String encryptWithRsa(String plaintext, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    /**
     * 非對(duì)稱加密算法RSA解密
     *
     * @param ciphertext 密文
     * @param privateKey 私鑰
     * @return 解密后的明文
     * @throws Exception 解密異常
     */
    public static String decryptWithRsa(String ciphertext, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(ciphertext));
        return new String(decryptedBytes, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) throws Exception {
        //RSA非對(duì)稱加密示例
        String plaintext = "Hello, RSA!";
        //生成RSA密鑰對(duì)
        KeyPair keyPair = generateRsaKeyPair();
        //公鑰字符串獲取
        String publicKeyString = getRsaPublicKeyString(keyPair.getPublic());
        System.out.println("RSA publicKeyString: " + publicKeyString);
        //公鑰還原
        PublicKey publicKey = getPublicKey(publicKeyString);
        //私鑰字符串獲取
        String privateKeyString = getRsaPrivateKeyString(keyPair.getPrivate());
        System.out.println("RSA privateKeyString: " + privateKeyString);
        //私鑰還原
        PrivateKey privateKey = getPrivateKey(privateKeyString);
        // RSA公鑰加密
        String encryptedRSA = encryptWithRsa(plaintext, publicKey);
        System.out.println("RSA Encrypted: " + encryptedRSA);
        // RSA私鑰解密
        String decryptedRSA = decryptWithRsa(encryptedRSA, privateKey);
        System.out.println("RSA Decrypted: " + decryptedRSA);
    }
}

3. 哈希算法加密

package com.example.demo.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.util.DigestUtils;

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 哈希算法加密
 *
 * @author wangbo
 * @date 2024/11/14
 */
@Slf4j
public class HashUtil {

    private HashUtil() {
    }

    /**
     * 哈希算法SHA-256
     *
     * @param plaintext 明文
     * @return 哈希值
     * @throws NoSuchAlgorithmException 哈希算法不支持異常
     */
    public static String hashWithSha256(String plaintext) throws NoSuchAlgorithmException {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hashBytes = digest.digest(plaintext.getBytes(StandardCharsets.UTF_8));
        return bytesToHex(hashBytes);
    }

    /**
     * 將字節(jié)數(shù)組轉(zhuǎn)換為十六進(jìn)制字符串
     *
     * @param bytes 字節(jié)數(shù)組
     * @return 十六進(jìn)制字符串
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(0xFF & b);
            if (hex.length() == 1) {
                sb.append('0');
            }
            sb.append(hex);
        }
        return sb.toString();
    }

    /**
     * SHA密碼加密
     *
     * @param sourceStr 源字符串
     * @return 加密字符串
     */
    public static String sha(String sourceStr) {
        try {
            MessageDigest sha = MessageDigest.getInstance("SHA");
            sha.update(sourceStr.getBytes(StandardCharsets.UTF_8));
            return new BigInteger(1, sha.digest()).toString(32);
        } catch (NoSuchAlgorithmException e) {
            log.error("SHA字符串加密異常", e);
            return null;
        }
    }

    /**
     * MD5密碼加密
     *
     * @param sourceStr 源字符串
     * @return 加密字符串
     */
    public static String md5(String sourceStr) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(sourceStr.getBytes(StandardCharsets.UTF_8));
            return new BigInteger(1, md5.digest()).toString(16);
        } catch (NoSuchAlgorithmException e) {
            log.error("MD5字符串加密異常", e);
            return null;
        }
    }

    public static void main(String[] args) throws NoSuchAlgorithmException {
        String plaintext = "Hello Hash!";
        String hashValue = hashWithSha256(plaintext);
        System.out.println("SHA-256 Hash: " + hashValue);
        String sha = sha(plaintext);
        System.out.println("SHA: " + sha);
        String md5 = md5(plaintext);
        System.out.println("MD5: " + md5);
        //spring的工具類進(jìn)行MD5加密
        String md5Spring = DigestUtils.md5DigestAsHex(plaintext.getBytes(StandardCharsets.UTF_8));
        System.out.println("MD5Spring: " + md5Spring);
        //commons-codec的工具類進(jìn)行MD5加密
        String md5Commons = org.apache.commons.codec.digest.DigestUtils.md5Hex(plaintext);
        System.out.println("MD5Commons: " + md5Commons);
    }
}

如果使用 commons-codec 的工具類進(jìn)行 MD5 加密,可能需要引入下面的依賴:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>${commons.codec.version}</version>
</dependency>

4. Base64 編解碼

package com.example.demo.util;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * Base64
 *
 * @author wangbo
 * @date 2024/11/14
 */
public class Base64Util {

    private Base64Util() {
    }

    /**
     * Base64 編碼
     *
     * @param plainText 內(nèi)容
     * @return 十六進(jìn)制字符串
     */
    public static String encodeBase64(String plainText) {
        byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8);
        return Base64.getEncoder().encodeToString(plainBytes);
    }

    /**
     * Base64 解碼
     *
     * @param base64Text 十六進(jìn)制字符串
     * @return 內(nèi)容
     */
    public static String decodeBase64(String base64Text) {
        byte[] base64Bytes = Base64.getDecoder().decode(base64Text);
        return new String(base64Bytes, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) {
        // Base64 編碼
        String base64Text = Base64Util.encodeBase64("Hello Base64!");
        System.out.println("Base64 Encoded: " + base64Text);
        // Base64 解碼
        String decodedText = Base64Util.decodeBase64(base64Text);
        System.out.println("Base64 Decoded: " + decodedText);
    }
}

到此這篇關(guān)于Java中常用文本加解密工具類總結(jié)的文章就介紹到這了,更多相關(guān)Java加解密工具類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java final關(guān)鍵字用法、場(chǎng)景、面試題全解析

    Java final關(guān)鍵字用法、場(chǎng)景、面試題全解析

    本文全程圍繞final的核心用法展開,從“修飾變量、修飾方法、修飾類”三個(gè)核心場(chǎng)景,搭配實(shí)戰(zhàn)代碼、避坑細(xì)節(jié),再補(bǔ)充高頻面試題,幫你徹底吃透final,既適合新手入門,也適合鞏固基礎(chǔ)、備戰(zhàn)面試,感興趣的朋友一起看看吧
    2026-04-04
  • Java集合類中文介紹

    Java集合類中文介紹

    本文首先對(duì)Java集合類框架做了簡(jiǎn)單說明,之后對(duì)主要類和為API做了介紹:Collection、List、Set、AbstractCollection、AbstractList、AbstractSet、Iterator、ListIterator。
    2013-11-11
  • SpringBoot+WebMagic實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的示例代碼

    SpringBoot+WebMagic實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的示例代碼

    本文是對(duì)spring?boot+WebMagic+MyBatis做了整合,使用WebMagic爬取數(shù)據(jù),然后通過MyBatis持久化爬取的數(shù)據(jù)到mysql數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • 使用spring@value加載時(shí)機(jī)

    使用spring@value加載時(shí)機(jī)

    這篇文章主要介紹了使用spring@value加載時(shí)機(jī)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 創(chuàng)建Java線程安全類的七種方法

    創(chuàng)建Java線程安全類的七種方法

    線程安全是指某個(gè)方法或某段代碼,在多線程中能夠正確的執(zhí)行,不會(huì)出現(xiàn)數(shù)據(jù)不一致或數(shù)據(jù)污染的情況,我們把這樣的程序稱之為線程安全的,反之則為非線程安全的,下面這篇文章主要給大家介紹了關(guān)于創(chuàng)建Java線程安全類的七種方法,需要的朋友可以參考下
    2022-06-06
  • SpringBoot整合Mysql和Redis的詳細(xì)過程

    SpringBoot整合Mysql和Redis的詳細(xì)過程

    這篇文章主要介紹了SpringBoot整合Mysql和Redis的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • java基礎(chǔ)的詳細(xì)了解第四天

    java基礎(chǔ)的詳細(xì)了解第四天

    這篇文章對(duì)Java編程語(yǔ)言的基礎(chǔ)知識(shí)作了一個(gè)較為全面的匯總,在這里給大家分享一下。需要的朋友可以參考,希望能給你帶來幫助
    2021-08-08
  • SpringBoot項(xiàng)目啟動(dòng)失?。篈PPLICATION FAILED TO START的解決方法

    SpringBoot項(xiàng)目啟動(dòng)失敗:APPLICATION FAILED TO START的

    文章介紹了在使用Spring Boot 4.0.0版本時(shí)遇到的Mapper文件找不到的問題,并通過將依賴版本切換到3.5.7來解決問題,此外,文章還提供了關(guān)于Spring Boot新版本使用注意事項(xiàng)的總結(jié),包括版本兼容性、配置變更、新特性、遷移建議和常見問題,需要的朋友可以參考下
    2025-11-11
  • 解決SpringBoot整合RocketMQ遇到的坑

    解決SpringBoot整合RocketMQ遇到的坑

    這篇文章主要介紹了解決SpringBoot整合RocketMQ遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot跨域問題的五種解決方式

    SpringBoot跨域問題的五種解決方式

    前后端分離開發(fā)中,跨域問題是很常見的一種問題,下面這篇文章主要給大家介紹了關(guān)于SpringBoot跨域問題的五種解決方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12

最新評(píng)論

凤凰县| 正宁县| 广南县| 高尔夫| 衡东县| 诸城市| 常德市| 永城市| 长乐市| 如皋市| 含山县| 左云县| 天水市| 明星| 西藏| 元氏县| 宜君县| 白河县| 新郑市| 旌德县| 宁蒗| 兴义市| 临沂市| 广平县| 县级市| 江西省| 南丰县| 通渭县| 沅陵县| 航空| 嘉鱼县| 外汇| 德昌县| 通辽市| 威海市| 噶尔县| 沭阳县| 田林县| 苗栗县| 南城县| 宁陕县|