欢迎访问宙启技术站
智能推送

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函数实现,可以根据需要选择适合的算法进行加密和解密操作。