問題:
設定ファイルに平文のパスワードを保存するとセキュリティ上のリスクが生じる。これらのリスクを軽減するには、プログラムへのアクセス可能性を維持しながらパスワードを暗号化する必要があります。
Java の PBE を使用した解決策:
堅牢なアプローチは、Java のパスワードを利用することです。 Based Encryption (PBE) メカニズム。これには、ユーザーが指定したパスワードとソルト値から秘密キーを生成することが含まれます。次に、秘密キーを使用してパスワードが暗号化されます。
実装:
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 中国語 Web サイトの他の関連記事を参照してください。