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

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

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

How Can I Securely Encrypt Passwords in Configuration Files Using Java?

구성 파일의 비밀번호 암호화: 안전한 접근 방식

문제:

구성 파일에 일반 텍스트 비밀번호를 저장하면 보안 위험이 발생합니다. . 이러한 위험을 완화하려면 프로그램에 대한 접근성을 유지하면서 비밀번호를 암호화해야 합니다.

Java PBE를 사용하는 솔루션:

강력한 접근 방식은 Java 비밀번호를 활용하는 것입니다. 기반 암호화(PBE) 메커니즘. 여기에는 사용자가 제공한 비밀번호와 솔트 값에서 비밀 키를 생성하는 작업이 포함됩니다. 그런 다음 비밀 키는 비밀번호를 암호화하는 데 사용됩니다.

구현:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

import java.security.*;

import javax.crypto.*;

import javax.crypto.spec.*;

 

public class PasswordEncryption {

 

    public static void main(String[] args) {

        String password = "mySecretPassword";

        String salt = "someUniqueSaltValue";

        int iterationCount = 40000;

        int keyLength = 128;

 

        // Create a secret key

        SecretKeySpec secretKey = createSecretKey(password.toCharArray(), salt, iterationCount, keyLength);

 

        // Encrypt the password

        String encryptedPassword = encrypt(password, secretKey);

 

        // Decrypt the password

        String decryptedPassword = decrypt(encryptedPassword, secretKey);

 

        System.out.println("Original password: " + password);

        System.out.println("Encrypted password: " + encryptedPassword);

        System.out.println("Decrypted password: " + decryptedPassword);

    }

 

    private static SecretKeySpec createSecretKey(char[] password, String salt, int iterationCount, int keyLength) {

        try {

            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");

            PBEKeySpec keySpec = new PBEKeySpec(password, salt.getBytes("UTF-8"), iterationCount, keyLength);

            return new SecretKeySpec(keyFactory.generateSecret(keySpec).getEncoded(), "AES");

        } catch (NoSuchAlgorithmException | InvalidKeySpecException | UnsupportedEncodingException e) {

            throw new RuntimeException(e);

        }

    }

 

    private static String encrypt(String password, SecretKeySpec secretKey) {

        try {

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

            cipher.init(Cipher.ENCRYPT_MODE, secretKey);

            return Base64.getEncoder().encodeToString(cipher.doFinal(password.getBytes("UTF-8")));

        } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException | UnsupportedEncodingException e) {

            throw new RuntimeException(e);

        }

    }

 

    private static String decrypt(String encryptedPassword, SecretKeySpec secretKey) {

        try {

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

            cipher.init(Cipher.DECRYPT_MODE, secretKey);

            return new String(cipher.doFinal(Base64.getDecoder().decode(encryptedPassword)));

        } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | BadPaddingException | IllegalBlockSizeException e) {

            throw new RuntimeException(e);

        }

    }

}

로그인 후 복사

보안 고려 사항:

PBE는 비밀번호 보안을 강화하므로 비밀 키를 생성하는 데 사용되는 마스터 비밀번호를 보호하는 것이 중요합니다. 마스터 비밀번호를 외부 보안 위치에 저장하거나 코드 내에서 난독화할 수 있습니다. 또한 무차별 대입 공격을 방지하기 위해 속도 제한이나 기타 조치를 구현하는 것을 고려하세요.

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

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