Heim  >  Artikel  >  Java  >  Wie kann ich in Konfigurationsdateien gespeicherte Passwörter mit der passwortbasierten Verschlüsselung von Java sicher verschlüsseln?

Wie kann ich in Konfigurationsdateien gespeicherte Passwörter mit der passwortbasierten Verschlüsselung von Java sicher verschlüsseln?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-17 04:17:03675Durchsuche

How can I securely encrypt passwords stored in configuration files using Java's Password Based Encryption?

Passwörter in Konfigurationsdateien verschlüsseln

Der Schutz von in Konfigurationsdateien gespeicherten Passwörtern ist von entscheidender Bedeutung. Hier ist ein sicherer Ansatz mit der passwortbasierten Verschlüsselung von Java:

Problemübersicht:

Das Verschlüsseln von Passwörtern in Konfigurationsdateien ermöglicht ein sicheres Speichern und Abrufen durch Programme. Diese Methode verhindert, dass vertrauliche Informationen kompromittiert werden.

Java's Password Based Encryption Solution:

Java's Password Based Encryption (PBE) bietet eine bequeme Möglichkeit, Passwörter zu ver- und entschlüsseln ein passwortbasierter Schlüssel. Es umfasst die folgenden Schritte:

  • Initialisieren Sie ein Cipher-Objekt mit dem „AES/CBC/PKCS5Padding“-Algorithmus.
  • Berechnen Sie einen javax.crypto.SecretKey aus dem Passwort mithilfe eines javax. crypto.SecretKeyFactory mit dem „PBKDF2WithHmacSHA512“ Algorithmus.

Codebeispiel:

import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.InvalidKeySpecException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PBEKeySpec;
import java.util.Base64;

public class PasswordEncryption {

    public static void main(String[] args) throws Exception {
        // Generate a secret key from the password
        char[] password = "mySecurePassword".toCharArray();
        byte[] salt = new String("12345678").getBytes();
        int iterationCount = 40000;
        int keyLength = 128;
        SecretKeySpec key = createSecretKey(password, salt, iterationCount, keyLength);

        // Encrypt a password using the secret key
        String originalPassword = "secretPassword";
        String encryptedPassword = encrypt(originalPassword, key);

        // Decrypt the encrypted password
        String decryptedPassword = decrypt(encryptedPassword, key);
    }

    private static SecretKeySpec createSecretKey(char[] password, byte[] salt, int iterationCount, int keyLength) throws NoSuchAlgorithmException, InvalidKeySpecException {
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
        PBEKeySpec keySpec = new PBEKeySpec(password, salt, iterationCount, keyLength);
        SecretKey keyTmp = keyFactory.generateSecret(keySpec);
        return new SecretKeySpec(keyTmp.getEncoded(), "AES");
    }

    private static String encrypt(String property, SecretKeySpec key) throws GeneralSecurityException, UnsupportedEncodingException {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        AlgorithmParameters parameters = cipher.getParameters();
        IvParameterSpec ivParameterSpec = parameters.getParameterSpec(IvParameterSpec.class);
        byte[] cryptoText = cipher.doFinal(property.getBytes("UTF-8"));
        byte[] iv = ivParameterSpec.getIV();
        return base64Encode(iv) + ":" + base64Encode(cryptoText);
    }

    private static String base64Encode(byte[] bytes) {
        return Base64.getEncoder().encodeToString(bytes);
    }

    private static String decrypt(String string, SecretKeySpec key) throws GeneralSecurityException, IOException {
        String iv = string.split(":")[0];
        String property = string.split(":")[1];
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(base64Decode(iv)));
        return new String(cipher.doFinal(base64Decode(property)), "UTF-8");
    }

    private static byte[] base64Decode(String property) throws IOException {
        return Base64.getDecoder().decode(property);
    }
}

Sicherheitsüberlegungen:

Diese Methode verwendet eine starke Verschlüsselung Algorithmus (AES) und eine sichere Schlüsselableitungsfunktion (PBKDF2WithHmacSHA512). Es ist wichtig, ein sicheres Passwort zu wählen und es sicher aufzubewahren.

Speichern des Master-Passworts:

Das zum Verschlüsseln der Konfigurationsdatei verwendete Passwort erfordert eine sichere Speicherung. Speichern Sie es in einer Umgebungsvariablen oder einem separaten sicheren Ort.

Das obige ist der detaillierte Inhalt vonWie kann ich in Konfigurationsdateien gespeicherte Passwörter mit der passwortbasierten Verschlüsselung von Java sicher verschlüsseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn