安全なソフトウェア設計では、パスワードを平文で保存することは避けてください。代わりに、ハッシュおよび暗号化技術を使用して機密情報を保護します。
資格情報を文字列から文字配列に移行します。文字列は不変であるため、クリーンアップする前にデータが漏洩する可能性があります。一方、文字配列はすぐにクレンジングできます。
セキュリティのために元のハッシュを保持しながら資格情報を暗号化します。認証プロセス中にのみ資格情報を復号化します。認証情報のハードコーディングを避け、代わりに暗号化された構成ファイルなどに安全に保存することをお勧めします。
データを暗号化するために 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 中国語 Web サイトの他の関連記事を参照してください。