Maison  >  Article  >  Java  >  Comment stocker en toute sécurité les informations d'identification des utilisateurs dans un logiciel ?

Comment stocker en toute sécurité les informations d'identification des utilisateurs dans un logiciel ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-25 18:44:11850parcourir

How to Securely Store User Credentials in Software?

Stockage sécurisé des informations d'identification des utilisateurs

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.

Étape 1 : Convertir les informations d'identification en tableaux de caractères

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.

Étape 2 : Chiffrer les informations d'identification et déchiffrer temporairement

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.

Étape 3 : Appliquer TLS ou SSL pour une transmission sécurisée

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.

Étape 4 : Mettre en œuvre des techniques d'obscurcissement

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.

Exemple de code

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn