Java函数:实现基本的加密解密算法
发布时间:2023-07-04 19:33:49
在Java中,可以使用几种常见的加密解密算法实现数据的加密和解密操作。下面将介绍几种常见的加密解密算法。
1. 基本的替换算法:将字母按照一定规则进行替换,常见的有Caesar加密算法和简单的字母移位算法。例如,Caesar加密算法将明文中的每个字母按照指定的偏移量进行移位,得到密文。
public static String caesarEncrypt(String plainText, int key) {
StringBuilder cipherText = new StringBuilder();
for (int i = 0; i < plainText.length(); i++) {
char c = plainText.charAt(i);
if (Character.isLetter(c)) {
char offset = Character.isUpperCase(c) ? 'A' : 'a';
c = (char) ((c - offset + key) % 26 + offset);
}
cipherText.append(c);
}
return cipherText.toString();
}
public static String caesarDecrypt(String cipherText, int key) {
return caesarEncrypt(cipherText, 26 - key);
}
2. 对称加密算法:使用同一个密钥进行加密和解密,常见的有DES、AES等算法。例如,使用AES算法进行加密和解密:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public static String aesEncrypt(String plainText, String key) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String aesDecrypt(String cipherText, String key) throws Exception {
byte[] encryptedBytes = Base64.getDecoder().decode(cipherText);
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
3. 非对称加密算法:使用公钥对数据进行加密,使用私钥进行解密,常见的有RSA算法。例如,使用RSA算法进行加密和解密:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
import java.util.Base64;
public static String rsaEncrypt(String plainText) throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String rsaDecrypt(String cipherText, PrivateKey privateKey) throws Exception {
byte[] encryptedBytes = Base64.getDecoder().decode(cipherText);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes);
}
需要注意的是,对称加密算法和非对称加密算法需要使用密钥进行加密和解密。对称加密算法使用相同的密钥进行加密和解密,而非对称加密算法使用公钥进行加密,私钥进行解密。因此,在实际使用中,需要生成密钥对,并且安全地保存私钥。
以上是基本的加密解密算法的Java函数实现,可以根据需要选择适合的算法进行加密和解密操作。
