IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Studio Java Discussion :

KeyStore Protection de clé Android studio


Sujet :

Android Studio Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut KeyStore Protection de clé Android studio
    Bonjour,

    J'essais de créer une activité de login pour un projet android studio.
    Un utilisateur s'identifie avec un non d'utilisateur et un mot de passe.

    J'ai créé une base de données SQLite qui contient ces infos. Jusque là tout est facile.

    Sauf que coder en clair le mdp dans la BDD, n'est pas optimal coté sécurité et je voulais essayer de crypter le mot de passe avant de le stocker. Et c'est là que les soucis ont commencés XD.

    J'ai essayé plusieurs techniques mais je n'en ai réussi aucune :'(. J'ai fini par tomber sur un tuto assez clair qui consiste à exploiter le KeyStore d'android.
    L'objectif est donc lors de l'inscription, de créer une clé secrète qui sera stocké dans le Keystore (apparemment assez sûr) et cette clé sera utilisée pour encrypter le mot de passe saisi lors de l'inscription puis utilisée pour encrypter toute tentative de connexion et ainsi comparer les 2 "messages cryptés". Si il est identique => l'utilisateur est loggé, sinon il est rejeté.

    Pour cela il faut donc accéder plusieurs fois au Keystore et c'est là que je bloque. Ca me créé toujours des instances différentes de keyStore et donc il est impossible de récupérer la clé qui y est stockée.
    Je ne vois vraiment pas d'où peut venir l'erreur (peut-être de la méthode load mais si je lui passe un autre paramètre ça génère une erreur).

    Je vous remercie par avance de bien vouloir m'éclairer.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    private SecretKey genreatePrivateKey() {  // Génère la clé secrète
        KeyGenerator generator = null;
        try {
            generator = KeyGenerator.getInstance("AES");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        generator.init(256);
        SecretKey key = generator.generateKey();
        return key;
    }
     
    public void saveKey(SecretKey key) throws CertificateException, NoSuchAlgorithmException, IOException, NoSuchPaddingException, InvalidKeyException, UnrecoverableKeyException {
     
        java.security.KeyStore ks = null;
        try {
            ks = java.security.KeyStore.getInstance(java.security.KeyStore.getDefaultType());
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }
        ks.load(null);
        try {
            ks.setEntry("key1", new KeyStore.SecretKeyEntry(key), null);
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }
     
        FileOutputStream fos = new FileOutputStream("nvxKeyStore"); // Je n'ai absolument pas compris à quoi servait cette partie
        try {
            ks.store(fos, null);
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }
    }
     
    public void recupKey() throws CertificateException, NoSuchAlgorithmException, IOException, NoSuchPaddingException {
        java.security.KeyStore ks = null;
        try {
            ks = java.security.KeyStore.getInstance("nvxKeyStore");
            //ks = java.security.KeyStore.getInstance("AndroidKeyStore");  // Est-ce que le ks.store permet d'enregistrer le keystore pour le rouvrir plus tard ? En tout cas, ca ne marche pas...
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }
        ks.load(null);
     
        // Key imported, obtain a reference to it.
        SecretKey keyStoreKey = null;
        try {
            keyStoreKey = (SecretKey) ks.getKey("key1", null);
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (UnrecoverableKeyException e) {
            e.printStackTrace();
        }
     
        Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
        try {
            cipher.init(Cipher.ENCRYPT_MODE, keyStoreKey);
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }
    }


    Je précise que j'ai pas mal "bidouillé" donc le code n'est pas optimal (pas factorisé...). Désolé pour la mise en forme, sans le "petits points, l'indentation sautée toujours.
    De plus, lorsque tout est fait dans la même méthode (enregistrement de la clé puis récupération de celle ci), ca marche bien. Le problème vient donc bien du fait que les 2 instances du KeyStore sont différentes.


    J'en profite pour demander, est-ce une méthode d'encryptage efficace ou est-ce qu'il y a une autre méthode plus efficace (sans être trop dure à mettre en place ) ?
    Je ne comprends pas trop où stocker la clé (ailleurs que dans le KeyStore) qui sert à crypter le mdp. Car si c'est pour stocker la clé dans la BDD, je ne vois absolument pas l'intérêt.

    Je vous remercie par avance pour votre aide.

    Bonne journée.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Personne n'aurait une idée pour chiffre un mdp avant de le stocker en BDD ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/03/2016, 20h41
  2. Google sort un nouvel EDI pour Android : Android Studio
    Par Gordon Fowler dans le forum Android Studio
    Réponses: 43
    Dernier message: 03/12/2013, 19h08
  3. Android Studio Git
    Par Twixou dans le forum Android Studio
    Réponses: 1
    Dernier message: 31/05/2013, 08h38
  4. Impossible d'atteindre URI - Android Studio
    Par man_u dans le forum Android Studio
    Réponses: 0
    Dernier message: 23/05/2013, 01h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo