보안 소프트웨어 설계에서는 비밀번호를 일반 텍스트로 저장하지 마세요. 대신 해싱 및 암호화 기술을 사용하여 민감한 정보를 보호하세요.
자격 증명을 문자열에서 문자 배열로 마이그레이션하세요. 문자열은 변경할 수 없으므로 정리 전에 데이터가 노출될 수 있습니다. 반면 문자 배열은 즉시 정리할 수 있습니다.
보안을 위해 원본 해시를 보존하면서 자격 증명을 암호화합니다. 인증 프로세스 중에만 자격 증명을 해독합니다. 자격 증명을 하드 코딩하는 것을 피하고 대신 암호화된 구성 파일과 같이 안전하게 저장하는 것이 좋습니다.
TLS 또는 SSL을 구현하여 데이터 암호화 클라이언트와 서버 간의 전송. 이를 통해 자격 증명이 도청되지 않도록 보호합니다.
디컴파일이 발생하는 경우에도 악의적인 당사자가 보안 조치에 액세스하지 못하도록 난독화 기술을 적용합니다. 난독화는 공격자가 취약점을 발견하기 어렵게 만듭니다.
다음 코드 조각은 자격 증명 암호화 및 해독을 보여줍니다.
import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; public class SecureCredentials { private static final char[] PASSWORD = "YourEncryptionKey".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 encrypt(char[] property) throws Exception { 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)); // Encrypt and save to temporary storage String encrypted = Base64.encodeBytes(pbeCipher.doFinal(property)); // Cleanup data sources for (int i = 0; i < property.length; i++) { property[i] = 0; } property = null; System.gc(); // Return encryption result return encrypted; } public static String decrypt(String property) throws Exception { SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); SecretKey key = keyFactory.generateSecret(new PBEKeySpec(PASSWORD)); Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES"); pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(SALT, 20)); return new String(pbeCipher.doFinal(Base64.decode(property))); } // Usage example public static void main(String[] args) { try { char[] password = "MySecurePassword".toCharArray(); String encryptedPassword = encrypt(password); String decryptedPassword = decrypt(encryptedPassword); System.out.println("Original Password: " + String.valueOf(password)); System.out.println("Encrypted Password: " + encryptedPassword); System.out.println("Decrypted Password: " + decryptedPassword); } catch (Exception e) { e.printStackTrace(); } } }
위 내용은 소프트웨어에 사용자 자격 증명을 안전하게 저장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!