Bootstrap

使用Java实现数据加密与解密

使用Java实现数据加密与解密

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊一聊如何使用Java实现数据加密与解密。数据加密在现代应用中至关重要,确保数据在传输和存储过程中不被未授权的第三方访问。下面将通过详细的代码示例展示如何在Java中实现这一功能。

一、引入必要的包

首先,我们需要引入Java加密扩展(JCE)相关的包,这些包包含了加密、解密所需的类和方法。

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import cn.juwatech.security.EncryptionUtils;

二、生成密钥

在对称加密算法(如AES)中,我们需要一个密钥来加密和解密数据。以下代码展示了如何生成一个AES密钥。

public class KeyGeneratorUtil {
    public static SecretKey generateKey(int n) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(n);
        SecretKey secretKey = keyGenerator.generateKey();
        return secretKey;
    }

    public static String encodeKey(SecretKey secretKey) {
        return Base64.getEncoder().encodeToString(secretKey.getEncoded());
    }

    public static SecretKey decodeKey(String encodedKey) {
        byte[] decodedKey = Base64.getDecoder().decode(encodedKey);
        return new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
    }
}

三、加密数据

使用生成的密钥对数据进行加密。

public class EncryptionUtil {
    public static String encrypt(String plainText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }
}

四、解密数据

使用相同的密钥对数据进行解密。

public class DecryptionUtil {
    public static String decrypt(String encryptedText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
        return new String(decryptedBytes);
    }
}

五、整合示例

以下代码展示了完整的加密和解密过程。

public class EncryptionExample {
    public static void main(String[] args) {
        try {
            // 生成密钥
            SecretKey secretKey = KeyGeneratorUtil.generateKey(256);
            String encodedKey = KeyGeneratorUtil.encodeKey(secretKey);
            System.out.println("Encoded Key: " + encodedKey);

            // 待加密的原文
            String plainText = "Hello, JuwaTech!";
            System.out.println("Original Text: " + plainText);

            // 加密
            String encryptedText = EncryptionUtil.encrypt(plainText, secretKey);
            System.out.println("Encrypted Text: " + encryptedText);

            // 解密
            SecretKey decodedKey = KeyGeneratorUtil.decodeKey(encodedKey);
            String decryptedText = DecryptionUtil.decrypt(encryptedText, decodedKey);
            System.out.println("Decrypted Text: " + decryptedText);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

六、使用自定义工具类

我们可以将上述加密和解密过程封装到工具类中,以便在项目中复用。

package cn.juwatech.security;

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

public class EncryptionUtils {
    public static SecretKey generateKey(int n) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(n);
        return keyGenerator.generateKey();
    }

    public static String encodeKey(SecretKey secretKey) {
        return Base64.getEncoder().encodeToString(secretKey.getEncoded());
    }

    public static SecretKey decodeKey(String encodedKey) {
        byte[] decodedKey = Base64.getDecoder().decode(encodedKey);
        return new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
    }

    public static String encrypt(String plainText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String encryptedText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
        return new String(decryptedBytes);
    }
}

七、使用工具类进行加密解密

使用封装好的工具类,可以简化加密和解密过程。

public class EncryptionToolExample {
    public static void main(String[] args) {
        try {
            // 生成密钥
            SecretKey secretKey = EncryptionUtils.generateKey(256);
            String encodedKey = EncryptionUtils.encodeKey(secretKey);
            System.out.println("Encoded Key: " + encodedKey);

            // 待加密的原文
            String plainText = "Hello, JuwaTech!";
            System.out.println("Original Text: " + plainText);

            // 加密
            String encryptedText = EncryptionUtils.encrypt(plainText, secretKey);
            System.out.println("Encrypted Text: " + encryptedText);

            // 解密
            SecretKey decodedKey = EncryptionUtils.decodeKey(encodedKey);
            String decryptedText = EncryptionUtils.decrypt(encryptedText, decodedKey);
            System.out.println("Decrypted Text: " + decryptedText);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

;