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

如何使用Java函数对字符串进行加密和解密。

发布时间:2023-07-03 06:34:41

在Java中,可以使用几种不同的方法对字符串进行加密和解密。下面将介绍两种常用的加密和解密方法:对称加密和非对称加密。

1. 对称加密:

对称加密使用同一个密钥进行加密和解密,常见的算法有DES、AES等。下面是使用AES对称加密算法进行字符串加密和解密的示例代码:

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class SymmetricEncryption {

    public static void main(String[] args) {
        try {
            // 原字符串
            String originalString = "Hello, World!";
            
            // 密钥,长度必须为16的倍数
            String key = "MySecretKey12345";
            
            // 将原字符串转换为字节数组
            byte[] originalBytes = originalString.getBytes();
            
            // 创建AES对称加密算法的密钥规范
            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
            
            // 获取AES加密算法的实例
            Cipher cipher = Cipher.getInstance("AES");
            
            // 设置密钥和加密模式
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
            
            // 对原字符串进行加密
            byte[] encryptedBytes = cipher.doFinal(originalBytes);
            
            // 将加密后的字节数组转换为Base64编码的字符串
            String encodedString = Base64.getEncoder().encodeToString(encryptedBytes);
            System.out.println("加密后的字符串:" + encodedString);
            
            // 设置解密模式
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
            
            // 对加密后的字符串进行解密
            byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encodedString));
            
            // 将解密后的字节数组转换为字符串
            String decryptedString = new String(decryptedBytes);
            System.out.println("解密后的字符串:" + decryptedString);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 非对称加密:

非对称加密使用一对密钥进行加密和解密,常见的算法有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 class AsymmetricEncryption {

    public static void main(String[] args) {
        try {
            // 原字符串
            String originalString = "Hello, World!";
            
            // 生成RSA密钥对
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            keyPairGenerator.initialize(2048);
            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            
            // 获取公钥和私钥
            PublicKey publicKey = keyPair.getPublic();
            PrivateKey privateKey = keyPair.getPrivate();
            
            // 获取RSA加密算法的实例
            Cipher cipher = Cipher.getInstance("RSA");
            
            // 设置公钥和加密模式
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            
            // 对原字符串进行加密
            byte[] encryptedBytes = cipher.doFinal(originalString.getBytes());
            
            // 将加密后的字节数组转换为Base64编码的字符串
            String encodedString = Base64.getEncoder().encodeToString(encryptedBytes);
            System.out.println("加密后的字符串:" + encodedString);
            
            // 设置私钥和解密模式
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            
            // 对加密后的字符串进行解密
            byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encodedString));
            
            // 将解密后的字节数组转换为字符串
            String decryptedString = new String(decryptedBytes);
            System.out.println("解密后的字符串:" + decryptedString);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码展示了如何使用Java函数对字符串进行对称加密和解密、非对称加密和解密。可以根据实际需求选择适合的加密算法和密钥长度,并针对具体的需求进行调整。