> Java > java지도 시간 > Java의 비밀번호 기반 암호화를 사용하여 구성 파일에 저장된 비밀번호를 어떻게 안전하게 암호화할 수 있습니까?

Java의 비밀번호 기반 암호화를 사용하여 구성 파일에 저장된 비밀번호를 어떻게 안전하게 암호화할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-11-17 04:17:03
원래의
766명이 탐색했습니다.

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

구성 파일의 비밀번호 암호화

구성 파일에 저장된 비밀번호를 보호하는 것이 중요합니다. 다음은 Java의 비밀번호 기반 암호화를 사용하는 보안 접근 방식입니다.

문제 개요:

구성 파일의 비밀번호를 암호화하면 프로그램에서 안전하게 저장하고 검색할 수 있습니다. 이 방법을 사용하면 민감한 정보가 손상되는 것을 방지할 수 있습니다.

Java의 비밀번호 기반 암호화 솔루션:

Java의 비밀번호 기반 암호화(PBE)는 다음을 사용하여 비밀번호를 암호화하고 해독하는 편리한 방법을 제공합니다. 비밀번호 기반 키. 여기에는 다음 단계가 포함됩니다.

  • "AES/CBC/PKCS5Padding" 알고리즘을 사용하여 Cipher 개체를 초기화합니다.
  • javax를 사용하여 비밀번호에서 javax.crypto.SecretKey를 계산합니다. "PBKDF2WithHmacSHA512"를 사용하는 crypto.SecretKeyFactory 알고리즘.

코드 예:

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);
    }
}
로그인 후 복사

보안 고려 사항:

이 방법은 강력한 암호화를 사용합니다. 알고리즘(AES) 및 보안 키 파생 기능 (PBKDF2WithHmacSHA512). 강력한 비밀번호를 선택하여 안전하게 저장하는 것이 중요합니다.

마스터 비밀번호 저장:

구성 파일을 암호화하는 데 사용되는 비밀번호는 안전한 저장이 필요합니다. 환경 변수나 별도의 안전한 위치에 저장하세요.

위 내용은 Java의 비밀번호 기반 암호화를 사용하여 구성 파일에 저장된 비밀번호를 어떻게 안전하게 암호화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿