Gestion sécurisée des mots de passe dans le code source
Dans le contexte de l'accès à une API RESTful à l'aide de l'authentification de base, le stockage du nom d'utilisateur et du mot de passe en texte brut est un risque pour la sécurité. Pour améliorer la sécurité, tenez compte des recommandations suivantes :
1. Convertir les mots de passe en tableaux de caractères
Remplacez le mot de passe en texte brut par un tableau de caractères. Cela empêche l'utilisation d'objets String, qui conservent les données après avoir été définis sur null.
2. Chiffrer les informations d'identification et décrypter temporairement
Cryptez les informations d'identification avec un algorithme tel que Triple Data Encryption Standard (3DES) avant de les stocker. Décryptez-les uniquement pendant le processus d'authentification.
3. Stocker les informations d'identification en externe
Évitez de coder en dur les informations d'identification. Au lieu de cela, stockez-les dans un emplacement centralisé, tel qu'un fichier de configuration ou une base de données. Chiffrez-les avant d'enregistrer le fichier et appliquez éventuellement une autre couche de cryptage au fichier lui-même.
4. Protégez la transmission
Utilisez Transport Layer Security (TLS) ou Secure Sockets Layer (SSL) pour sécuriser le processus de transmission.
5. Obscurcir le code
Appliquez des techniques d'obscurcissement à votre code compilé pour dissimuler les données sensibles.
Exemple de cryptage et de déchiffrement de mot de passe :
Ce qui suit L'exemple de code illustre les première et deuxième étapes décrites ci-dessus :
import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; public class PasswordEncryptionExample { private static final char[] PASSWORD = "Unauthorized_Personel_Is_Unauthorized".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 main(String[] args) throws Exception { String password = "LetMePass_Word"; char[] passwordArray = password.toCharArray(); 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)); byte[] encryptedPassword = pbeCipher.doFinal(passwordArray); // Cleanup password data sources Arrays.fill(passwordArray, (char) 0); Arrays.fill(encryptedPassword, (byte) 0); // Decrypt the encrypted password pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(SALT, 20)); byte[] decryptedPassword = pbeCipher.doFinal(encryptedPassword); String decryptedPasswordString = new String(decryptedPassword); System.out.println("Decrypted password: " + decryptedPasswordString); } }
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!