当前位置:首页 > Java

Java如何加密string

2026-03-25 13:11:49Java

使用Java内置的MessageDigest进行哈希加密

哈希加密(如MD5、SHA-256)适用于不可逆的场景,如密码存储。以下示例使用SHA-256:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class HashExample {
    public static String encryptSHA256(String input) throws NoSuchAlgorithmException {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hashBytes = digest.digest(input.getBytes());
        StringBuilder hexString = new StringBuilder();
        for (byte b : hashBytes) {
            hexString.append(String.format("%02x", b));
        }
        return hexString.toString();
    }
}

调用方法:encryptSHA256("yourString")返回16进制哈希值。

使用对称加密(AES)

AES加密需密钥,适用于可逆加密场景。需依赖javax.crypto包:

Java如何加密string

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;

public class AESExample {
    public static SecretKey generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(256); // 密钥长度
        return keyGenerator.generateKey();
    }

    public static String encryptAES(String input, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedBytes = cipher.doFinal(input.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }
}

生成密钥后调用encryptAES("text", key),返回Base64编码的密文。

使用非对称加密(RSA)

RSA通过公钥加密、私钥解密,适用于安全传输场景:

Java如何加密string

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import javax.crypto.Cipher;
import java.util.Base64;

public class RSAExample {
    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        generator.initialize(2048);
        return generator.generateKeyPair();
    }

    public static String encryptRSA(String input, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedBytes = cipher.doFinal(input.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }
}

调用encryptRSA("data", keyPair.getPublic())加密数据。

使用第三方库(如Bouncy Castle)

如需更多算法(如ChaCha20),可添加Bouncy Castle依赖:

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.70</version>
</dependency>

示例代码:

import org.bouncycastle.crypto.engines.ChaChaEngine;
import org.bouncycastle.crypto.params.KeyParameter;

public class BouncyCastleExample {
    public static byte[] encryptChaCha(byte[] input, byte[] key) {
        ChaChaEngine cipher = new ChaChaEngine();
        cipher.init(true, new KeyParameter(key));
        byte[] output = new byte[input.length];
        cipher.processBytes(input, 0, input.length, output, 0);
        return output;
    }
}

注意事项

  • 哈希加密不可逆,适合存储密码(需加盐防彩虹表攻击)。
  • AES密钥需安全存储,避免硬编码。
  • RSA加密大数据时需分段处理(默认限制245字节)。
  • 生产环境推荐使用TLS/SSL等协议替代手动加密。

标签: Javastring
分享给朋友:

相关文章

Java如何添加事件

Java如何添加事件

添加事件的基本方法 在Java中,事件处理通常涉及事件源、事件监听器和事件对象。以下是实现事件处理的基本步骤: 定义事件监听器接口 事件监听器是一个接口,定义了处理特定事件的方法。例如,Action…

Java如何换行

Java如何换行

在Java中换行的方法 使用转义字符\n 在字符串中插入\n表示换行符,适用于控制台输出或文本处理: System.out.println("第一行\n第二行"); 使用System.lineS…

Java如何添加事件

Java如何添加事件

添加事件监听器的方法 在Java中,事件监听通常用于响应用户操作(如按钮点击、键盘输入等)或系统事件。以下是几种常见的事件监听实现方式: 使用匿名内部类 button.addActionListe…

java 如何比较string

java 如何比较string

比较字符串的方法 在Java中,字符串的比较可以通过多种方式实现,具体取决于比较的需求(如内容、大小写敏感性等)。以下是常见的字符串比较方法: 使用equals()方法进行内容比较 equals()…

Java如何创建多线程

Java如何创建多线程

创建多线程的几种方法 Java中创建多线程主要有以下三种方式:继承Thread类、实现Runnable接口、实现Callable接口并结合ExecutorService使用。 继承Thread类 通…

如何学好Java技巧

如何学好Java技巧

理解基础概念 掌握Java的核心概念是学习的基础。熟悉面向对象编程(OOP)的四大特性:封装、继承、多态和抽象。理解基本数据类型、变量、运算符、控制流程(如循环和条件语句)以及数组的使用。 实践…