当前位置:首页 > 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实现异步处理的常见方法 使用CompletableFuture CompletableFuture是Java 8引入的异步编程工具,支持链式调用和组合操作。 CompletableFutur…

如何将Java打包成.jar

如何将Java打包成.jar

使用JDK的jar命令打包 确保JDK已安装并配置环境变量。在项目根目录(包含编译后的.class文件)执行以下命令: jar cvf YourJarName.jar * 若需指定主类(可执行jar…

java 如何比较string

java 如何比较string

比较字符串的方法 在Java中,比较字符串有多种方法,具体取决于比较的需求和上下文。 使用equals()方法比较内容 equals()方法用于比较两个字符串的内容是否相同。这是最常用的字符串比较方…

Java如何换行

Java如何换行

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

shell 如何调用Java

shell 如何调用Java

在Shell中调用Java程序 通过Shell脚本调用Java程序需要确保Java环境已正确配置,并明确指定类路径或JAR文件路径。以下是具体实现方法: 检查Java环境 执行以下命令验证Java是…

Java如何添加事件

Java如何添加事件

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