Rumah > Java > javaTutorial > Bagaimanakah saya boleh menyulitkan kata laluan yang disimpan dalam fail konfigurasi dengan selamat menggunakan Penyulitan Berdasarkan Kata Laluan Java?

Bagaimanakah saya boleh menyulitkan kata laluan yang disimpan dalam fail konfigurasi dengan selamat menggunakan Penyulitan Berdasarkan Kata Laluan Java?

Mary-Kate Olsen
Lepaskan: 2024-11-17 04:17:03
asal
743 orang telah melayarinya

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

Menyulitkan Kata Laluan dalam Fail Konfigurasi

Melindungi kata laluan yang disimpan dalam fail konfigurasi adalah penting. Berikut ialah pendekatan selamat menggunakan Penyulitan Berasaskan Kata Laluan Java:

Gambaran Keseluruhan Masalah:

Menyulitkan kata laluan dalam fail konfigurasi membolehkan penyimpanan dan pengambilan semula yang selamat oleh program. Kaedah ini menghalang maklumat sensitif daripada dikompromi.

Penyelesaian Penyulitan Berdasarkan Kata Laluan Java:

Penyulitan Berdasarkan Kata Laluan Java (PBE) menyediakan cara mudah untuk menyulitkan dan menyahsulit kata laluan menggunakan kunci berasaskan kata laluan. Ia melibatkan langkah berikut:

  • Memulakan objek Cipher dengan algoritma "AES/CBC/PKCS5Padding".
  • Kira javax.crypto.SecretKey daripada kata laluan menggunakan javax. crypto.SecretKeyFactory dengan algoritma "PBKDF2WithHmacSHA512".

Contoh Kod:

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);
    }
}
Salin selepas log masuk

Pertimbangan Keselamatan:Kaedah ini menggunakan algoritma penyulitan kuat (AES) dan fungsi terbitan kunci selamat (PBKDF2WithHmacSHA512). Adalah penting untuk memilih kata laluan yang kukuh dan menyimpannya dengan selamat.

Menyimpan Kata Laluan Induk:

Kata laluan yang digunakan untuk menyulitkan fail konfigurasi memerlukan storan yang selamat. Simpannya dalam pembolehubah persekitaran atau lokasi selamat yang berasingan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menyulitkan kata laluan yang disimpan dalam fail konfigurasi dengan selamat menggunakan Penyulitan Berdasarkan Kata Laluan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan