>Java >java지도 시간 >소스 코드에서 비밀번호를 안전하게 처리하는 방법은 무엇입니까?

소스 코드에서 비밀번호를 안전하게 처리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-16 16:57:03240검색

How to Securely Handle Passwords in Source Code?

소스 코드에서 안전하게 비밀번호 처리

기본 인증을 사용하여 RESTful API에 액세스하는 경우 사용자 이름과 비밀번호를 일반 텍스트로 저장하는 것은 보안 위험. 보안을 강화하려면 다음 권장 사항을 고려하십시오.

1. 비밀번호를 문자 배열로 변환

일반 텍스트 비밀번호를 문자 배열로 바꿉니다. 이렇게 하면 null로 설정된 후 데이터를 유지하는 String 개체의 사용이 방지됩니다.

2. 자격증명 암호화 및 임시 복호화

자격증명을 저장하기 전에 3DES(Triple Data Encryption Standard)와 같은 알고리즘으로 암호화하세요. 인증 과정에서만 복호화하세요.

3. 자격 증명을 외부에 저장

자격 증명을 하드 코딩하지 마세요. 대신 구성 파일이나 데이터베이스와 같은 중앙 위치에 저장하십시오. 파일을 저장하기 전에 암호화하고 선택적으로 파일 자체에 또 다른 암호화 계층을 적용합니다.

4. 전송 보호

TLS(전송 계층 보안) 또는 SSL(Secure Sockets Layer)을 사용하여 전송 프로세스를 보호합니다.

5. 코드 난독화

컴파일된 코드에 난독화 기술을 적용하여 민감한 데이터를 숨깁니다.

비밀번호 암호화 및 암호 해독의 예:

다음 코드 샘플은 위에 설명된 첫 번째 및 두 번째 단계를 보여줍니다.

import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

public class PasswordEncryptionExample {
    private static final char[] PASSWORD = "Unauthorized_Personel_Is_Unauthorized".toCharArray();
    private static final byte[] SALT = {
            (byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12,
            (byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12
    };

    public static void main(String[] args) throws Exception {
        String password = "LetMePass_Word";
        char[] passwordArray = password.toCharArray();
        
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
        SecretKey key = keyFactory.generateSecret(new PBEKeySpec(PASSWORD));
        Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
        pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(SALT, 20));

        byte[] encryptedPassword = pbeCipher.doFinal(passwordArray);
        
        // Cleanup password data sources
        Arrays.fill(passwordArray, (char) 0);
        Arrays.fill(encryptedPassword, (byte) 0);
        
        // Decrypt the encrypted password
        pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(SALT, 20));
        byte[] decryptedPassword = pbeCipher.doFinal(encryptedPassword);
        
        String decryptedPasswordString = new String(decryptedPassword);
        System.out.println("Decrypted password: " + decryptedPasswordString);
    }
}

위 내용은 소스 코드에서 비밀번호를 안전하게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.