Dans la conception de logiciels sécurisés, évitez de stocker les mots de passe en texte brut. Utilisez plutôt des techniques de hachage et de chiffrement pour protéger les informations sensibles.
Migrer les informations d'identification des chaînes vers les tableaux de caractères. Les chaînes sont immuables, ce qui laisse les données susceptibles d'être exposées avant le nettoyage. Les tableaux de caractères, en revanche, peuvent être nettoyés immédiatement.
Crypter les informations d'identification tout en préservant le hachage d'origine pour des raisons de sécurité. Décryptez les informations d'identification uniquement pendant le processus d'authentification. Il est conseillé d'éviter de coder en dur les informations d'identification et de les stocker en toute sécurité, par exemple dans des fichiers de configuration cryptés.
Implémenter TLS ou SSL pour crypter les données transmission entre client et serveur. Cela protège les informations d'identification contre les écoutes clandestines.
Appliquez des techniques d'obscurcissement pour empêcher les parties malveillantes d'accéder aux mesures de sécurité, même en cas de décompilation. L'obscurcissement rend plus difficile pour les attaquants de découvrir les vulnérabilités.
L'extrait de code suivant illustre le cryptage et le déchiffrement des informations d'identification :
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(); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!