Java函数:如何实现加密解密。
发布时间:2023-07-04 21:35:32
Java中实现加密解密的方式有很多种,下面我将介绍几种常见的做法。
1.对称加密算法:
对称加密算法使用相同的密钥进行加密和解密。Java提供了多种对称加密算法,如DES、AES、Blowfish等。以下是使用AES算法进行加密解密的示例代码:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class SymmetricEncryptionDemo {
public static void main(String[] args) throws Exception {
// 生成AES密钥
SecretKey secretKey = generateAESKey();
String originalText = "Hello, World!";
// 加密
byte[] encryptedText = encrypt(originalText, secretKey);
System.out.println("Encrypted Text: " + new String(encryptedText));
// 解密
String decryptedText = decrypt(encryptedText, secretKey);
System.out.println("Decrypted Text: " + decryptedText);
}
public static SecretKey generateAESKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
return keyGenerator.generateKey();
}
public static byte[] encrypt(String plainText, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(plainText.getBytes());
}
public static String decrypt(byte[] encryptedText, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedTextBytes = cipher.doFinal(encryptedText);
return new String(decryptedTextBytes);
}
}
2.非对称加密算法:
非对称加密算法使用一对密钥,公钥用于加密,私钥用于解密。Java提供了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 AsymmetricEncryptionDemo {
public static void main(String[] args) throws Exception {
// 生成RSA密钥对
KeyPair keyPair = generateRSAKeyPair();
String originalText = "Hello, World!";
// 加密
byte[] encryptedText = encrypt(originalText, keyPair.getPublic());
System.out.println("Encrypted Text: " + new String(encryptedText));
// 解密
String decryptedText = decrypt(encryptedText, keyPair.getPrivate());
System.out.println("Decrypted Text: " + decryptedText);
}
public static KeyPair generateRSAKeyPair() throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
return keyPairGenerator.generateKeyPair();
}
public static byte[] encrypt(String plainText, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(plainText.getBytes());
}
public static String decrypt(byte[] encryptedText, PrivateKey privateKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedTextBytes = cipher.doFinal(encryptedText);
return new String(decryptedTextBytes);
}
}
3.哈希算法:
哈希算法是一种单向的加密算法,它将任意长度的数据转换为固定长度的哈希值,常用的哈希算法有MD5和SHA系列。Java提供了MessageDigest类用于实现哈希算法。以下是使用MD5算法进行加密的示例代码:
import java.security.MessageDigest;
import java.util.Base64;
public class HashAlgorithmDemo {
public static void main(String[] args) throws Exception {
String originalText = "Hello, World!";
// MD5加密
String md5EncodedText = encryptWithMD5(originalText);
System.out.println("MD5 Encoded Text: " + md5EncodedText);
// SHA-256加密
String sha256EncodedText = encryptWithSHA256(originalText);
System.out.println("SHA-256 Encoded Text: " + sha256EncodedText);
}
public static String encryptWithMD5(String plainText) throws Exception {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] encodedTextBytes = md5.digest(plainText.getBytes());
return Base64.getEncoder().encodeToString(encodedTextBytes);
}
public static String encryptWithSHA256(String plainText) throws Exception {
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] encodedTextBytes = sha256.digest(plainText.getBytes());
return Base64.getEncoder().encodeToString(encodedTextBytes);
}
}
通过以上的示例代码,你可以实现Java中的加密解密功能。具体选择哪种加密算法要根据实际需求和安全性要求来决定。
