如何在Maven项目中使用这些加密算法?
·
在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项目中使用加密算法的步骤如下:
- 在
pom.xml中添加Bouncy Castle或Apache Commons Codec依赖。 - 根据需求选择对称加密(如AES)、非对称加密(如RSA)或哈希算法(如SHA-256)。
- 使用Java的
Cipher、KeyGenerator或其他相关类实现加密解密逻辑。 - 对于更复杂的算法(如ECC),可以借助Bouncy Castle库实现。
以上示例涵盖了常见的加密场景,开发者可以根据实际需求调整密钥长度、加密模式或其他参数。
更多推荐
所有评论(0)