設定ファイル内のパスワードの暗号化
設定ファイルに保存されているパスワードを保護することは非常に重要です。 Java のパスワード ベースの暗号化を使用した安全なアプローチは次のとおりです。
問題の概要:
設定ファイル内のパスワードを暗号化すると、プログラムによる安全な保存と取得が可能になります。この方法により、機密情報の漏洩が防止されます。
Java のパスワード ベースの暗号化ソリューション:
Java のパスワード ベースの暗号化 (PBE) は、次を使用してパスワードを暗号化および復号化する便利な方法を提供します。パスワードベースのキー。これには次の手順が含まれます。
コード例:
import javax.crypto.*; import javax.crypto.spec.*; import java.security.InvalidKeySpecException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import java.security.spec.PBEKeySpec; import java.util.Base64; public class PasswordEncryption { public static void main(String[] args) throws Exception { // Generate a secret key from the password char[] password = "mySecurePassword".toCharArray(); byte[] salt = new String("12345678").getBytes(); int iterationCount = 40000; int keyLength = 128; SecretKeySpec key = createSecretKey(password, salt, iterationCount, keyLength); // Encrypt a password using the secret key String originalPassword = "secretPassword"; String encryptedPassword = encrypt(originalPassword, key); // Decrypt the encrypted password String decryptedPassword = decrypt(encryptedPassword, key); } private static SecretKeySpec createSecretKey(char[] password, byte[] salt, int iterationCount, int keyLength) throws NoSuchAlgorithmException, InvalidKeySpecException { SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); PBEKeySpec keySpec = new PBEKeySpec(password, salt, iterationCount, keyLength); SecretKey keyTmp = keyFactory.generateSecret(keySpec); return new SecretKeySpec(keyTmp.getEncoded(), "AES"); } private static String encrypt(String property, SecretKeySpec key) throws GeneralSecurityException, UnsupportedEncodingException { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); AlgorithmParameters parameters = cipher.getParameters(); IvParameterSpec ivParameterSpec = parameters.getParameterSpec(IvParameterSpec.class); byte[] cryptoText = cipher.doFinal(property.getBytes("UTF-8")); byte[] iv = ivParameterSpec.getIV(); return base64Encode(iv) + ":" + base64Encode(cryptoText); } private static String base64Encode(byte[] bytes) { return Base64.getEncoder().encodeToString(bytes); } private static String decrypt(String string, SecretKeySpec key) throws GeneralSecurityException, IOException { String iv = string.split(":")[0]; String property = string.split(":")[1]; Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(base64Decode(iv))); return new String(cipher.doFinal(base64Decode(property)), "UTF-8"); } private static byte[] base64Decode(String property) throws IOException { return Base64.getDecoder().decode(property); } }
セキュリティに関する考慮事項:
この方法では、強力な暗号化アルゴリズム (AES) と安全なキー導出関数 (PBKDF2WithHmacSHA512) が利用されます。強力なパスワードを選択し、安全に保管することが重要です。
マスター パスワードの保管:
構成ファイルの暗号化に使用されるパスワードは、安全な保管場所が必要です。環境変数または別の安全な場所に保存します。
以上がJava のパスワードベースの暗号化を使用して、構成ファイルに保存されているパスワードを安全に暗号化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。