Java配置文件用户名密码加密

在开发过程中,我们经常需要将敏感信息(如用户名和密码)存储在配置文件中。然而,将这些敏感信息以明文形式存储在配置文件中存在很大的安全风险。为了保护用户的隐私和数据安全,我们需要对这些敏感信息进行加密处理。本文将介绍如何使用Java对配置文件中的用户名和密码进行加密,并提供代码示例。

加密算法

在加密之前,我们需要选择一个合适的加密算法。常见的加密算法包括对称加密算法和非对称加密算法。对称加密算法使用相同的密钥进行加密和解密,速度较快但密钥的传输存在安全风险;非对称加密算法使用一对密钥进行加密和解密,安全性更高但速度较慢。在这里,我们选择对称加密算法,因为我们只需要在本地加密和解密配置文件中的敏感信息,并不需要将密钥传输给其他系统。

常用的对称加密算法有DES、AES等。在Java中,我们可以使用javax.crypto包提供的API来进行加密和解密操作。下面是一个使用AES算法加密和解密的示例代码:

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

public class AESUtils {

    private static final String ALGORITHM = "AES";
    private static final String KEY = "this-is-a-secret-key";

    public static String encrypt(String text) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(text.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

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

    public static void main(String[] args) throws Exception {
        String plainText = "Hello, World!";
        String encryptedText = encrypt(plainText);
        String decryptedText = decrypt(encryptedText);

        System.out.println("Plain Text: " + plainText);
        System.out.println("Encrypted Text: " + encryptedText);
        System.out.println("Decrypted Text: " + decryptedText);
    }
}

在上述代码中,ALGORITHM表示加密算法,KEY表示密钥。encrypt方法用于对文本进行加密,decrypt方法用于对加密文本进行解密。在main方法中,我们对字符串"Hello, World!"进行加密和解密,并打印结果。

配置文件加密示例

现在我们来看一个示例,如何使用上述的AES加密算法对配置文件中的用户名和密码进行加密。

首先,我们创建一个配置文件config.properties,其中包含用户名和密码:

username=admin
password=123456

接下来,我们创建一个ConfigUtils工具类,用于读取和写入配置文件中的用户名和密码。在读取用户名和密码时,我们使用上述的AES加密算法进行解密;在写入用户名和密码时,我们使用AES加密算法进行加密。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;

public class ConfigUtils {

    private static final String CONFIG_FILE = "config.properties";

    public static void writeConfig(String username, String password) throws Exception {
        Properties props = new Properties();
        props.setProperty("username", AESUtils.encrypt(username));
        props.setProperty("password", AESUtils.encrypt(password));
        try (OutputStream outputStream = new FileOutputStream(CONFIG_FILE)) {
            props.store(outputStream, null);
        }
    }

    public static String readConfig(String key) throws Exception {
        Properties props = new Properties();
        try (InputStream inputStream = new FileInputStream(CONFIG_FILE)) {
            props.load(inputStream);
        }
        return AESUtils.decrypt(props.getProperty(key));
    }

    public static void main(String[] args) throws Exception {
        String username = "admin";
        String password = "123456";

        writeConfig(username, password);

        String encryptedUsername = readConfig("username");
        String encryptedPassword = readConfig("password");

        String