Bonjour,
Est-ce que quelqu'un sait comment faire pour que mon application java ne puisse être exécutée que sur une seule machine ? J'aimerais créer des licenses avec date d'expiration pour les utilisateurs de mon logiciel.
Merci d'avance.
Bonjour,
Est-ce que quelqu'un sait comment faire pour que mon application java ne puisse être exécutée que sur une seule machine ? J'aimerais créer des licenses avec date d'expiration pour les utilisateurs de mon logiciel.
Merci d'avance.
Une méthode simple, c'est de stocker toutes ces informations dans une chaine de caractère en clair (date d'expiration, utilisateur, nombre de licences, etc). Ton application vérifie ces données un peu partout dans ton code. Ensuite, il te faut une paire de clé publique/privées (cryptographie). Java supporte très bien la cryptographie, autant t'en servir. Tu utilise ta clé privée que tu ne distribue jamais pour encoder cette chaine de caractères (une chaine différente pas client donc). Tu obtiens ainsi un code binaire crypté, que tu transfère à tes clients. Ton application, elle, contient la clé publique, elle l'utilise pour décoder le fichier et obtenir ca chaine de données, qu'elle utilise partout dans son code.
L'utilisation de clés publiques/privée garanti qu'un utilisateur ne pourra pas générer de fausse licence, elle n'empechera jamais de tripatouiller ton code pour faire sauter la protection.
Edit: regarde peut etre aussi du coté de truelicence:
https://truelicense.dev.java.net/
Merci ça a l'air intéressant, je vais y jeter un coup d'oeil.
Bonjour tchize, j'ai lu un peu partout sur le net divers articles sur la cryptographie, mais étant assez novice en la matière, pourriez-vous m'expliquer par où je dois commencer ? Avez-vous un bon tuto en ce qui concerne la génération de licenses pour mon application ?
Merci d'avance.
intro à la cryptographie:
http://ram-0000.developpez.com/tutoriels/cryptographie/
intro à la crypto sous java:
http://nyal.developpez.com/tutoriel/java/bouncycastle/
http://jmdoudoux.developpez.com/cour...p-securite.php
Bonsoir,
J'ai lu tous les liens que tu as postés et cela m'a permis de comprendre un peu mieux.
Pour mon problème de génération de license, dois-je donc commencer par la génération d'une pair de clés privée/publique ?
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 // Générer une paire de clef RSA public static KeyPair generateKeyPair() throws CryptoException { try { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); SecureRandom rand = SecureRandom.getInstance("SHA1PRNG"); keyPairGen.initialize(2048, rand); KeyPair keyPair = keyPairGen.generateKeyPair(); return keyPair; } catch (NoSuchAlgorithmException ex) { throw new CryptoException("Probleme lors de la création de la pair de clef : "+ex.getMessage()); } catch (InvalidParameterException ex) { throw new CryptoException("Probleme lors de la création de la pair de clef : "+ex.getMessage()); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Crypter avec la clef publique public static byte[] cryptWithRSAPublicKey(byte[] plainText,RSAPublicKey clefPublique) { BigInteger msgEnBigInteger = new BigInteger(plainText); BigInteger msgCrypte = msgEnBigInteger.modPow(clefPublique.getPublicExponent(), clefPublique.getModulus()); return msgCrypte.toByteArray(); }Et après ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Décrypter avec la clef privé public static byte[] decryptWithRSAPrivateKey(byte[] cipherText,RSAPrivateKey clefPrivee) { BigInteger msgADecrypteEnBigInt = new BigInteger(cipherText); BigInteger msgDecrypteEnBigInt = msgADecrypteEnBigInt.modPow(clefPrivee.getPrivateExponent(), clefPrivee.getModulus()); return msgDecrypteEnBigInt.toByteArray(); }
Dois-je maintenant créer un certificat ? et un keystore pour stocker mes clés ? Je suis un peu confus![]()
Partager