在Maven项目中添加加密算法依赖

在Maven项目的pom.xml文件中添加Bouncy Castle或Apache Commons Codec的依赖。Bouncy Castle支持更广泛的加密算法,而Apache Commons Codec提供了基础的编码解码功能。

<!-- Bouncy Castle 依赖 -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.70</version>
</dependency>

<!-- Apache Commons Codec 依赖 -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

实现AES加密解密

使用AES算法进行加密和解密需要生成密钥,并配置加密模式(如CBC)和填充方式(如PKCS5Padding)。以下是一个完整的AES加密解密示例。

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import java.security.SecureRandom;
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 encrypt(String plainText, SecretKey key, IvParameterSpec iv) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key, iv);
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String encryptedText, SecretKey key, IvParameterSpec iv) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, key, iv);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
        return new String(decryptedBytes);
    }

    public static void main(String[] args) throws Exception {
        SecretKey key = generateKey();
        byte[] ivBytes = new byte[16];
        new SecureRandom().nextBytes(ivBytes);
        IvParameterSpec iv = new IvParameterSpec(ivBytes);

        String encrypted = encrypt("Hello, AES!", key, iv);
        System.out.println("Encrypted: " + encrypted);

        String decrypted = decrypt(encrypted, key, iv);
        System.out.println("Decrypted: " + decrypted);
    }
}

实现RSA加密解密

RSA是一种非对称加密算法,需要生成公钥和私钥对。以下是一个RSA加密解密的示例代码。

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

public class RSAExample {
    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048); // 密钥长度
        return keyPairGenerator.generateKeyPair();
    }

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

    public static String decrypt(String encryptedText, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
        return new String(decryptedBytes);
    }

    public static void main(String[] args) throws Exception {
        KeyPair keyPair = generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        String encrypted = encrypt("Hello, RSA!", publicKey);
        System.out.println("Encrypted: " + encrypted);

        String decrypted = decrypt(encrypted, privateKey);
        System.out.println("Decrypted: " + decrypted);
    }
}

使用SHA-256进行哈希运算

SHA-256是一种常用的哈希算法,通常用于密码存储或数据完整性校验。以下是使用SHA-256生成哈希值的示例。

import java.security.MessageDigest;
import java.util.Base64;

public class SHA256Example {
    public static String hash(String input) throws Exception {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hashBytes = digest.digest(input.getBytes());
        return Base64.getEncoder().encodeToString(hashBytes);
    }

    public static void main(String[] args) throws Exception {
        String hashed = hash("Hello, SHA-256!");
        System.out.println("Hashed: " + hashed);
    }
}

使用Bouncy Castle实现更多加密算法

Bouncy Castle提供了更多加密算法的支持,例如ECC(椭圆曲线加密)。以下是一个使用Bouncy Castle实现ECC的示例。

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.KeyAgreement;
import java.security.*;
import java.security.spec.ECGenParameterSpec;

public class ECCExample {
    public static void main(String[] args) throws Exception {
        Security.addProvider(new BouncyCastleProvider());

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("ECDH", "BC");
        keyPairGenerator.initialize(new ECGenParameterSpec("secp256r1"));
        KeyPair keyPairA = keyPairGenerator.generateKeyPair();
        KeyPair keyPairB = keyPairGenerator.generateKeyPair();

        KeyAgreement keyAgreementA = KeyAgreement.getInstance("ECDH", "BC");
        keyAgreementA.init(keyPairA.getPrivate());
        keyAgreementA.doPhase(keyPairB.getPublic(), true);

        byte[] sharedSecretA = keyAgreementA.generateSecret();
        System.out.println("Shared Secret: " + Base64.getEncoder().encodeToString(sharedSecretA));
    }
}

总结

在Maven项目中使用加密算法的步骤如下:

  1. 在pom.xml中添加Bouncy Castle或Apache Commons Codec依赖。
  2. 根据需求选择对称加密(如AES)、非对称加密(如RSA)或哈希算法(如SHA-256)。
  3. 使用Java的Cipher、KeyGenerator或其他相关类实现加密解密逻辑。
  4. 对于更复杂的算法(如ECC),可以借助Bouncy Castle库实现。

以上示例涵盖了常见的加密场景,开发者可以根据实际需求调整密钥长度、加密模式或其他参数。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐