Java加密、解密函数:10个实用示例
Java加密和解密函数是常用的方法之一,用于保护数据的安全性。Java提供了各种加密和解密方法,可以根据需要选择适合的方法进行使用。以下是10个实用示例。
1. MD5加密方法
MD5是常用的加密算法之一,可以用于对密码、文件等进行加密。Java提供了MD5加密方法:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Encryption {
public static String md5(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] messageDigest = md.digest(input.getBytes());
BigInteger num = new BigInteger(1, messageDigest);
String hash = num.toString(16);
while (hash.length() < 32) {
hash = "0" + hash;
}
return hash;
}
catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
2. Base64编码和解码方法
Base64是一种将二进制数据编码成可打印字符的方法,可以用于传输和存储数据。Java提供了Base64编码和解码方法:
import java.util.Base64;
public class Base64Encryption {
public static String encode(String input) {
byte[] encodedBytes = Base64.getEncoder().encode(input.getBytes());
return new String(encodedBytes);
}
public static String decode(String input) {
byte[] decodedBytes = Base64.getDecoder().decode(input.getBytes());
return new String(decodedBytes);
}
}
3. DES加密和解密方法
DES是一种对称加密算法,可以用于加密和解密数据。Java提供了DES加密和解密方法:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class DESEncryption {
private static final String ALGORITHM = "DES";
public static String encrypt(String input, String key) throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
keyGen.init(56);
SecretKey secretKey = keyGen.generateKey();
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String input, String key) throws Exception {
byte[] decodedBytes = Base64.getDecoder().decode(input.getBytes(StandardCharsets.UTF_8));
KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
keyGen.init(56);
SecretKey secretKey = keyGen.generateKey();
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(decodedBytes);
return new String(decryptedBytes);
}
}
4. AES加密和解密方法
AES是一种对称加密算法,可以用于加密和解密数据。Java提供了AES加密和解密方法:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class AESEncryption {
private static final String ALGORITHM = "AES";
public static String encrypt(String input, String key) throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String input, String key) throws Exception {
byte[] decodedBytes = Base64.getDecoder().decode(input.getBytes(StandardCharsets.UTF_8));
KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(decodedBytes);
return new String(decryptedBytes);
}
}
5. RSA加密和解密方法
RSA是一种非对称加密算法,可以用于加密和解密数据。Java提供了RSA加密和解密方法:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.util.Base64;
public class RSAEncryption {
public static String encrypt(String input) throws Exception {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair keyPair = keyGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal(input.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String input) throws Exception {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair keyPair = keyGen.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(input));
return new String(decryptedBytes);
}
public static String sign(String input, PrivateKey privateKey) throws Exception {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(input.getBytes());
byte[] signatureBytes = signature.sign();
return Base64.getEncoder().encodeToString(signatureBytes);
}
public static boolean verify(String input, String signature, PublicKey publicKey) throws Exception {
Signature s = Signature.getInstance("SHA256withRSA");
s.initVerify(publicKey);
s.update(input.getBytes());
return s.verify(Base64.getDecoder().decode(signature));
}
}
6. HMAC-SHA256加密方法
HMAC-SHA256是一种基于哈希函数的加密算法,可以用于生成消息验证码等。Java提供了HMAC-SHA256加密方法:
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class HmacSha256Encryption {
private static final String ALGORITHM = "HmacSHA256";
public static String hmac(String input, String key) throws NoSuchAlgorithmException, InvalidKeyException {
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM);
Mac mac = Mac.getInstance(ALGORITHM);
mac.init(keySpec);
byte[] hashBytes = mac.doFinal(input.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(hashBytes);
}
}
7. Bouncy Castle加密和解密方法
Bouncy Castle是一个开源的加密库,可以用于Java加密和解密操作。Java提供了Bouncy Castle加密和解密方法:
`java
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.AlgorithmParameters;
import java.security.Security;
import java.security.spec.KeySpec;
import java.util.Base64;
public class BouncyCastleEncryption {
static {
Security.addProvider(new BouncyCastleProvider());
}
public static String encrypt(String input, String password, String salt) throws Exception {
byte[] saltBytes = salt.getBytes(StandardCharsets.UTF_8);
byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8);
byte[] passwordBytes = password.getBytes(StandardCharsets.UTF_8);
SecretKey secretKey = getSecretKey(saltBytes, passwordBytes);
byte[] initializationVector = getInitializationVector();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(initializationVector));
byte[] encryptedBytes = cipher.doFinal(inputBytes);
byte[] combinedBytes = new byte[initializationVector.length + encryptedBytes.length];
System.arraycopy(initializationVector, 0, combinedBytes, 0, initializationVector.length);
System.arraycopy(encryptedBytes, 0, combinedBytes, initializationVector.length, encryptedBytes.length);
return Base64.getEncoder().encodeToString(combinedBytes);
