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

avec Java Discussion :

Cryptage RSA - Problème


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Cryptage RSA - Problème
    Bonjour a tous,
    pour un projet scolaire je fait un programme de chiffrement RSA.
    Voila mon code , il est en Java's Cool (presque identique a Java , vous ne serez pas perdu)
    2 Problèmes:
    I. Chaine a transformer en ASCII

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String codenucleaire = "isn";
    // la chaine en ASCII ???
    int codeAscii = codenucleaire.hashCode();  
    println("ASCII : " + codeAscii);
    La fonction .hashCode() transforme pas en ascii , quel fonction doit-je utiliser ??
    Si je me réfère a http://www.tableascii.com/ le mot isn devrait faire en décimal 105 (i) 115 (s) 110 (n)

    II. Découpage de la chaine ASCII
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //FAIRE L'ENCRYPTAGE (Decouper la chaine en n-1 , ex: si n fait 3 caractere
    // decouper tout les 2 caractere XX XX XX XX , de ce cas n fait 3 caracteres.
    String s1 = codestring.substring(0, nstring.length()-1);
    println("Premiere paires: " + s1 );    
    String s2 = codestring.substring(nstring.length()-1, (nstring.length()-1)*2); 
    println("Deuxieme paires: " + s2 ); 
    String s3 = codestring.substring((nstring.length()-1)*2, (nstring.length()-1)*3); 
    println("Deuxieme paires: " + s3 );
    Pour l'instant avec ma fausse chaine ASCII j’obtiens "104580"
    Mon "n" étant 141 le découpage se fait "n.length - 1" donc 2 par deux.
    J'ai donc 3 partie decouper "10" , "45" et "80".
    Comment faire cette partie de manière automatiser quelque soit le nombre de caractère de ma chaine ??
    Pour que je puisse changer la chaine a encrypté a volonté .

    Merci a tous pour vos aides , car j'en suis sur il y en aura !

    Voila le code entier
    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
    void main(){
    // Les variables	
            	int p = 3 ; //nombre premiers
            	int q = 47 ; //nombre premiers
            	int n = p*q ;
            	int f = (p-1)*(q-1) ;
            	int e = 79; //calculer avec Theoreme de Bezout
            	int c = 0;
            	int d = -1;
    while(c != 1) {
    d = d + 1 ;
    c = (e*d)%f;
    }
    // les 2 clés
    **println("La clé publique est (" + e +"," + n +")");
    **println("La clé privée est (" + d +"," + n +")"); 
    
    //la chaine en encrypter
    String codenucleaire = "isn";
    // la chaine en ASCII ???
    int codeAscii = codenucleaire.hashCode(); *
    println("ASCII : " + codeAscii); 
    String codestring = String.valueOf(codeAscii); 
    String nstring = String.valueOf(n); 
    println("N : " + nstring); 
    println("La chaine ASCII fait: " + codestring.length() + " caractères.");
    println("La chaine N fait: " + nstring.length() + " caractères."); 
    
    //FAIRE L'ENCRYPTAGE (Decouper la chaine en n-1 , ex: si n fait 3 caractere
    // decouper tout les 2 caractere XX XX XX XX , de ce cas n fait 3 caracteres.
    String s1 = codestring.substring(0, nstring.length()-1);
    println("Premiere paires: " + s1 );    
    String s2 = codestring.substring(nstring.length()-1, (nstring.length()-1)*2); 
    println("Deuxieme paires: " + s2 ); 
    String s3 = codestring.substring((nstring.length()-1)*2, (nstring.length()-1)*3); 
    println("Deuxieme paires: " + s3 ); 
    
    int num1= Integer.parseInt(s1);
    int num2= Integer.parseInt(s2); 
    int num3= Integer.parseInt(s3); 
    //encrypter la partie decouper^e modulo n
    int num1mix = (int) (Math.pow(num1, e)%n); 
    int num2mix = (int) (Math.pow(num2, e)%n); 
    int num3mix = (int) (Math.pow(num3, e)%n); 
    // la chaine encrypter
        System.out.println(num1mix + "" + num2mix + "" + num3mix);
    }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 361
    Points
    1 361
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String codenucleaire = "isn";
    // la chaine en ASCII ???
    int codeAscii = codenucleaire.hashCode();  
    println("ASCII : " + codeAscii);
    La fonction hashCode, en Java, a un tout autre sens et l'algorithme n'est pas garanti. On s'en sert pour le stockage dans des structures de données comme HashSet, qui nécessitent une clé de hachage. (plus d'information ici: http://fr.wikipedia.org/wiki/Table_de_hachage)

    Ceci pour dire que, pour ta fonction de hachage, fais la à la main. C'est plus simple, c'est plus propre. Autant que faire se peut, on n'utilise pas directement la fonction hashCode
    les raisonnables ont duré, les passionné-e-s ont vécu

  3. #3
    Membre habitué
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Points : 188
    Points
    188
    Par défaut
    Comme indiqué par rmaker, La fonction hashCode() renvoi le hashCode (un nombre entier) d'un objet quelconque et pas uniquement d'un objet de type String.
    Dans le cas de chiffrement, vous avez besoin des bytes représentant le String.
    Pour cela utilisez la fonction getBytes() qui revoie un tableau des Bytes du String.
    Par défaut, la fonction converti les caractères en bytes en fonction de la plateforme. Pour éviter de perdre de caractères dans la conversion, utilisez getBytes("UTF-8") au lieu de getBytes() .

  4. #4
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Salut,
    Pour faire simple, prends ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Afficher le code ascii corespondant à chacun ds caractères d'un texte
            for (int i = 0; i < text.length; i++) {
                int asc = (int) text[i];
                System.out.println("le code de "+text[i]+" est "+asc);
            }
    //Avec text, un tableau des caractères (char text[]=votreString.toCharArray())
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Pour la decoupage de la chaine ? personne pour m'aider ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    Salut,

    pour le découpage de ta chaîne passe ta String en char[] et itère dessus n-1 par n-1.

  7. #7
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Tu veux découper quel texte? le texte initial ou la représentation décimale du texte claire?
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Bonjour,

    Citation Envoyé par alleztulle Voir le message
    Pour la decoupage de la chaine ? personne pour m'aider ?
    - Il suffit de faire une boucle avec des substring().
    - La discussion serait plus claire, donc plus efficace, s'il y avait un fil par question. C'est normal qu'on ne sache pas sur quelle question se concentrer, surtout quand il y en a une sérieuse et une triviale.
    - La question est incroyablement mal posée. Si tu veux savoir comment découper une String en plus petites String de longueur N chacune, demande ça.
    Ne commence pas à parler de trucs de longueur n.length-1, ça veut rien dire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Algorithm de cryptage RSA
    Par aocaoc dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 29/12/2007, 18h26
  2. [RSA] problème avec CipherOutputStream
    Par LaseLiep dans le forum Sécurité
    Réponses: 4
    Dernier message: 16/10/2007, 15h50
  3. cryptage Rsa coté mobile et decryptage coté serveur
    Par Tunisia dans le forum Sécurité
    Réponses: 1
    Dernier message: 11/08/2007, 10h44
  4. Le cryptage RSA
    Par h_raf dans le forum C
    Réponses: 1
    Dernier message: 21/04/2007, 23h16
  5. [VB.NET2.0] cryptage RSA avec clef privée
    Par AP dans le forum Framework .NET
    Réponses: 4
    Dernier message: 17/04/2007, 15h35

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