Maison > Java > javaDidacticiel > le corps du texte

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

Patricia Arquette
Libérer: 2024-11-25 18:44:11
original
849 Les gens l'ont consulté

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();
        }
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal