Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3547 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  jme sens 1 peu con lol

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

jme sens 1 peu con lol

n°1531913
tipriz69
Posté le 22-03-2007 à 03:37:04  profilanswer
 

voila bon jme presente... je sui etudiant en 2eme annee de MASS mais je fais aussi de la programmation JAVA, hier soir je sais pa ski mes passé par la tete :pt1cable:  mais j'ai décidé de faire un peu de cryto  :lol: lol :lol: .
ok voila je vous mets le code source la mais je sens ke ca va etre un peu basique pr vous alors riez pas trop :lol:  :sweat:  
 
 
 
/*
 * Encript.java
 *
 * Created on 21 mars 2007, 22:56
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */
 
package encrypt;
 
/**
 *
 * @author XXX
 */
public class Encrypt {
    static char[] alphabet;
    static char[] newAlphabet;
    static int[] newAlphabet2;
    /** Creates a new instance of Encript */
    public Encrypt(int i,char[] texte){
        create(i);
        int pos;
        for (int j = 0 ; j<texte.length;j++){
            pos=indexOf(texte[j],alphabet);
            texte[j]=newAlphabet[pos];
        }
    }
    public void decrypt(char[] texte){
        int pos;
        for(int i=0;i<texte.length;i++){
            pos=indexOf(texte[i],newAlphabet);
            texte[i]=alphabet[pos];
        }
}
    public int indexOf(char c,char[] t){
        for(int i = 0 ; i<t.length ; i++)
            if(t[i]==c)
                return i;
        return -1;
    }
    public void create(int k){
        //alphabet
        String liste = "abcdefghijklmnopqrstuvwxyz1234567890 -éABCDEFGHIJKLMNOPQRSTUVWXYZ&²~#'{}()[]|è`_ç^à@°$£¤^¨<>,?;./:!§ù%*µ";
        alphabet = new char[liste.length()];
        for(int i = 0 ; i<liste.length();i++)
            alphabet[i]=liste.charAt(i);
        //new alphabet
        newAlphabet = new char[liste.length()];
        for(int i = 0 ; i<newAlphabet.length;i++)
            newAlphabet[(i+k)%alphabet.length]=alphabet[i];
        //new alphabet2
        newAlphabet2 = new int[liste.length()];
        for(int i = 0 ; i<newAlphabet2.length;i++)
            newAlphabet2[i]=newAlphabet[i];
    }
    public static char[] toCharArray(String s){
        char[] c =new char[s.length()];
        for(int i = 0 ; i<s.length() ; i++){
            c[i]=s.charAt(i);
        }
        return c;
    }
    public static void main(String[] args) {
        int p=33;
        String s = "trop choutte on dirait un vrai code lol"+" "+p;
        char[] r=toCharArray(s);
        Encrypt e=new Encrypt(p,r);
        System.out.println(alphabet.length);
        /*for(int i = 0 ; i<alphabet.length;i++)
            System.out.print(alphabet[i]);
        System.out.println();
        for(int i = 0 ; i<alphabet.length;i++)
            System.out.print(newAlphabet[i]);
        System.out.println();
        for(int i = 0 ; i<alphabet.length;i++)
            System.out.print(newAlphabet2[i]+" " );
        */
        for(int i = 0 ; i<r.length;i++)
            System.out.print(r[i]);
        System.out.println();
        System.out.println("p="+p);
        e.decrypt(r);
        for(int i = 0 ; i<r.length;i++)
            System.out.print(r[i]);
    }
}
 
 
 
 
ce que j'ai fait est tres con... j'ai juste crée une liste avec tous les caracteres possibles, je l'ai "translaté" d'une valeur p que je choisis et qui sera ma clé et ensuite j'ai utilisé cette nouvelle liste "translatée" pour coder ma chaine de caracteres.
 
je voudrais savoir ce ke vs en pensez tt dabord et ensuite quelles sont d'après vous les modifications ou les amelioration a apporter  :sweat:  :sweat:

mood
Publicité
Posté le 22-03-2007 à 03:37:04  profilanswer
 

n°1533094
tipriz69
Posté le 24-03-2007 à 06:56:26  profilanswer
 

personne pr m'aider? :-(

n°1533118
red factio​n
Posté le 24-03-2007 à 11:42:29  profilanswer
 

utilise les balises deja  
 
comme ca :  

Code :
  1. int main(){
  2.   return 0;
  3. }

n°1535377
Giz
Posté le 28-03-2007 à 17:15:27  profilanswer
 

he ben heuresement que les procédés de crypto ne sont pas aussi banales  ! :lol:  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
[:dehors]

n°1535402
MagicBuzz
Posté le 28-03-2007 à 17:44:38  profilanswer
 

bah c'est basique, mais c'est déjà pas mal ;)
 
une autre solution que je m'étais amusé à faire, toute aussi banale, c'était encrypter avec mot de passe, en additionnant le code asci de chaque lettres du mot de passe une à une avec le texte... pas clair
 


[T]toto va à la plage
[P]azerty


 
=> j'ajoute 'a' à 't' => ça donne le premier caractère
=> j'ajoute 'z' à 'o' => ça me donne le second
=> et ainsi de suite. lorsque j'ai fini toutes les lettres du mot de passe, je reprend la séquence des lettres du mot de passe depuis 0
 
=> l'intérêt, c'est que ça prends un millième de secondes de plus à cracker ;)
 
ensuite, un système classique consiste à reprendre une approche que je trouve similaire à celle de huffman (compression) mais en l'inversant, et, au contraire, en gonflant la taille du fichier :
 
par exemple, pour une encryption sur 128 bits
 
"bonjour"
 
=> je compte chaque caractère différent
b = 1
o = 2
n = 1
j = 1
u = 1
r = 1
 
Je prends réparti de façon homongène mes caractères sur l'ensemble des valeurs possible de 0 à 2^127
 
=> ensuite, je remplace aléatoirement les caractères de mon texte par des membres de chaque plage correspondant à chaque caractère
 
la clé c'est juste la liste des indices de tes caractères trouvés.
 
en l'améliorant un peu, ce système est déjà bien plus difficile à cracker, puisqu'un même caractère peut avoir un (très) grand nombre de représentations différentes possibles. et vu que le choix de ses représenations est en fonction du nombre d'occurences, ça te donne un fichier en résultat totalement homogène : impossible de détecter les caractères qui sont souvent présents dans le code.
 
avec ce système par exemple, on sait qu'un fichier HTML commence (normalement) toujours par "<!DOCTYPE " => on sait donc, avec ton système retrouver toutes les occurences de ces lettres en un clin d'oeil. en réfléchissant un peu, on trouve que c'est un bête offset et le tour est joué. avec mon premier système, "azerty" est plus cours que "<!DOCTYPE " donc à nouveau, l'algo est trouvé en un pouillème de secondes.
 
avec le second système par contre, c'est un "miracle" si j'arrive à retrouver d'autres occurences de mes valeurs de remplacement dans le fichier. à partir de là, ça va devenir bonbon ne serait-ce que pour savoir quel algo a été utilisé. quant au brute force... idem, ça commence à devenir chocolat... par contre, si t'as bien suivit, ça multiplie la taille du fichier par 4 ;)
en reprenant toujours le système d'huffman, on peut s'amuser à construire une table de huffman qui monte jusqu'à 128 bits, et répartir toujours de façon proprotionnelle les caractères dedans. là, très franchement, ça commence à devenir très complexe pour le craquer : on doit recréer une table de huffman, et tester un peu toutes les combinaisons de ranges possible. pour un fichier ANSI, no souci, grace au 8° bit de poids fort dans le fichier original, on se rends compte immédiatement des erreurs... mais pour un document binaire...
 
après, je me suis jamais posé la question d'aller plus loin. à la base, y'a des fonctions 3DES et autres dans tous les langages ou presque, donc autant ne pas réinventer la roue ;)


Message édité par MagicBuzz le 28-03-2007 à 17:53:30
n°1535978
MagicBuzz
Posté le 29-03-2007 à 17:15:54  profilanswer
 

Pour le fun, je me suis amusé à mettre en place le système, avec une encryption sur 32 bits, et sans utiliser l'arbre de huffman inversé (trop chiant à coder, même si ça doit rendre le code infiniment moins crackable).
 
Le code :
 

Code :
  1. using System;
  2. using System.IO;
  3. namespace crypt
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             string filename = args[0];
  10.             string keyname = args[1];
  11.             string option = args[2];
  12.             if (option == "E" )
  13.             {
  14.                 Encrypt(filename, keyname);
  15.             }
  16.             else
  17.             {
  18.                 Decrypt(filename, keyname);
  19.             }
  20.         }
  21.         static void Encrypt(string filename, string keyname)
  22.         {
  23.             Random rnd = new Random(DateTime.Now.Millisecond);
  24.             byte[] file = File.ReadAllBytes(filename);
  25.             long filesize = file.LongLength;
  26.             byte[] encrypt = new byte[filesize * 4];
  27.             UInt32[] key = new UInt32[256];
  28.             byte[] keyf = new byte[1024];
  29.             for (long i = 0; i < filesize; i++)
  30.             {
  31.                 key[(int)file[i]]++;
  32.             }
  33.             for (int i = 0; i < 256; i++)
  34.             {
  35.                 keyf[i * 4] = (byte)(key[i] % 256);
  36.                 keyf[i * 4 + 1] = (byte)((key[i] / 256) % 256);
  37.                 keyf[i * 4 + 2] = (byte)((key[i] / 65536) % 256);
  38.                 keyf[i * 4 + 3] = (byte)((key[i] / 16777216) % 256);
  39.             }
  40.             for (long i = 0; i < filesize; i++)
  41.             {
  42.                 UInt32 val = (UInt32)(rnd.NextDouble() * (double)key[file[i]]);
  43.                 if (file[i] > 0)
  44.                 {
  45.                     for (int j = file[i] - 1; j >= 0; j--)
  46.                     {
  47.                         val += key[j];
  48.                     }
  49.                 }
  50.                 encrypt[i * 4] = (byte)(val % 256);
  51.                 encrypt[i * 4 + 1] = (byte)((val / 256) % 256);
  52.                 encrypt[i * 4 + 2] = (byte)((val / 65536) % 256);
  53.                 encrypt[i * 4 + 3] = (byte)((val / 16777216) % 256);
  54.             }
  55.             File.WriteAllBytes(filename + ".enc", encrypt);
  56.             File.WriteAllBytes(keyname, keyf);
  57.         }
  58.         static void Decrypt(string filename, string keyname)
  59.         {
  60.             byte[] keyf = File.ReadAllBytes(keyname);
  61.             UInt32[] key = new UInt32[256];
  62.             for (int i = 0; i < 256; i++)
  63.             {
  64.                 key[i] = (UInt32)keyf[i * 4] + ((UInt32)keyf[i * 4 + 1] * 256) + ((UInt32)keyf[i * 4 + 2] * 65536) + ((UInt32)keyf[i * 4 + 3] * 16777216);
  65.             }
  66.             byte[] filef = File.ReadAllBytes(filename);
  67.             byte[] file = new byte[filef.LongLength / 4];
  68.             for (long i = 0, lng = file.LongLength; i < lng; i++)
  69.             {
  70.                 UInt32 val = (UInt32)filef[i * 4] + ((UInt32)filef[(i * 4) + 1] * 256) + ((UInt32)filef[(i * 4) + 2] * 256) + ((UInt32)filef[(i * 4) + 3] * 16777216);
  71.                 for (int j = 0; j < 256; j++)
  72.                 {
  73.                     if (key[j] > val)
  74.                     {
  75.                         file[i] = (byte)j;
  76.                         break;
  77.                     }
  78.                     else
  79.                     {
  80.                         val -= key[j];
  81.                     }
  82.                 }
  83.             }
  84.             File.WriteAllBytes(filename + ".dec", file);
  85.         }
  86.     }
  87. }


 
Comme tu vois, c'est pas très compliqué, et ne plus, ça marche.
Je viens d'essayer d'encrypter un exécutable puis le décrypter, il marche toujours :D
 
Et clairement, vu la tronche du truc encrypté, tu peux courrir pour le décrypter, même si, parceque mes valeurs de remplacement respectent l'ordre de mes bytes, ça reste "relativement aisément" crackable.
 
=> en effet, si les bits de poids fort sont faibles, alors que sais que la valeur du caractère original est proche de 0, et si elle est élevée, je sais qu'elle est proche de 255. Ensuite, un peu de brute force permet de retrouver petit à petit les valeurs des bounds.
 
Par exemple, dans un EXE sous Windows, on a toujours le message "This program can not run in MS DOS mode...". Il est toujours au même endroit. Ca aide bien déjà ;)
 
=> A noter aussi que cet exemple est à titre d'exemple uniquement. Faire du ReadAllBytes sans vérifier avant que le fichier ne fait pas 100 Go c'est mal ;) Dans l'absolu, on utilisera des buffers, et pourquoi pas des threads pour gérer en // la lecture sur le disque, l'écriture, et l'encryption.
 
J'oubliais : à noter aussi que mon exemple est buggé : il ne fait pas ce qu'il est cencé faire : utilise un range de 0 à filesize caractères au lieu de 0 à 2^32 - 1 ;)


Message édité par MagicBuzz le 29-03-2007 à 17:35:03
n°1537861
MagicBuzz
Posté le 03-04-2007 à 15:06:41  profilanswer
 

Le même débugé (génération des caractères de remplacement sur l'ensemble UInt32.Min, UInt32.Max) :
 

Code :
  1. using System;
  2. using System.IO;
  3. namespace crypt
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             string filename = args[0];
  10.             string keyname = args[1];
  11.             string option = args[2];
  12.             if (option == "E" )
  13.             {
  14.                 Encrypt(filename, keyname);
  15.             }
  16.             else
  17.             {
  18.                 Decrypt(filename, keyname);
  19.             }
  20.         }
  21.         static void Encrypt(string filename, string keyname)
  22.         {
  23.             Random rnd = new Random(DateTime.Now.Millisecond);
  24.             byte[] file = File.ReadAllBytes(filename);
  25.             long filesize = file.LongLength;
  26.             byte[] encrypt = new byte[filesize * 4];
  27.             UInt32[] key = new UInt32[256];
  28.             byte[] keyf = new byte[1024];
  29.             // Clé
  30.             for (long i = 0; i < filesize; i++)
  31.             {
  32.                 key[(int)file[i]]++;
  33.             }
  34.             // Conversion de la clé dans un format enregistrable sur le disque
  35.             for (int i = 0; i < 256; i++)
  36.             {
  37.                 keyf[i * 4] = (byte)(key[i] % 256);
  38.                 keyf[i * 4 + 1] = (byte)((key[i] / 256) % 256);
  39.                 keyf[i * 4 + 2] = (byte)((key[i] / 65536) % 256);
  40.                 keyf[i * 4 + 3] = (byte)((key[i] / 16777216) % 256);
  41.             }
  42.             // Encryption du fichier en fonction de la clé
  43.             for (long i = 0; i < filesize; i++)
  44.             {
  45.                 UInt32 val = (UInt32)(rnd.NextDouble() * ((double)key[file[i]] * (double)UInt32.MaxValue) / (double)file.LongLength);
  46.                 if (file[i] > 0)
  47.                 {
  48.                     for (int j = file[i] - 1; j >= 0; j--)
  49.                     {
  50.                         val += (UInt32)(((double)key[j] * (double)UInt32.MaxValue) / (double)file.LongLength);
  51.                     }
  52.                 }
  53.                 encrypt[i * 4] = (byte)(val % 256);
  54.                 encrypt[i * 4 + 1] = (byte)((val / 256) % 256);
  55.                 encrypt[i * 4 + 2] = (byte)((val / 65536) % 256);
  56.                 encrypt[i * 4 + 3] = (byte)((val / 16777216) % 256);
  57.             }
  58.             File.WriteAllBytes(filename + ".enc", encrypt);
  59.             File.WriteAllBytes(keyname, keyf);
  60.         }
  61.         static void Decrypt(string filename, string keyname)
  62.         {
  63.             byte[] keyf = File.ReadAllBytes(keyname);
  64.             UInt32[] key = new UInt32[256];
  65.             for (int i = 0; i < 256; i++)
  66.             {
  67.                 key[i] = (UInt32)keyf[i * 4] + ((UInt32)keyf[i * 4 + 1] * 256) + ((UInt32)keyf[i * 4 + 2] * 65536) + ((UInt32)keyf[i * 4 + 3] * 16777216);
  68.             }
  69.             byte[] filef = File.ReadAllBytes(filename);
  70.             byte[] file = new byte[filef.LongLength / 4];
  71.             for (long i = 0, lng = file.LongLength; i < lng; i++)
  72.             {
  73.                 UInt32 val = (UInt32)filef[i * 4] + ((UInt32)filef[(i * 4) + 1] * 256) + ((UInt32)filef[(i * 4) + 2] * 256) + ((UInt32)filef[(i * 4) + 3] * 16777216);
  74.                 for (int j = 0; j < 256; j++)
  75.                 {
  76.                     if ((UInt32)(((double)key[j] * (double)UInt32.MaxValue) / (double)file.LongLength) > val)
  77.                     {
  78.                         file[i] = (byte)j;
  79.                         break;
  80.                     }
  81.                     else
  82.                     {
  83.                         val -= (UInt32)(((double)key[j] * (double)UInt32.MaxValue) / (double)file.LongLength);
  84.                     }
  85.                 }
  86.             }
  87.             File.WriteAllBytes(filename + ".dec", file);
  88.         }
  89.     }
  90. }

n°1537882
MagicBuzz
Posté le 03-04-2007 à 15:18:27  profilanswer
 

L'intérêt de ce truc, c'est qu'on génère "à chaque fois" un fichier différent, pour une même clé. Idéal donc pour un échange réseau : même si on envoies plusieurs fois la même information, on oblige un éventuel intru à décortiquer l'info à chaque fois, ce qui rends la tâche d'autant plus hardue : il suffit de noyer l'information importante dans un spam de données redondantes.

n°1543591
Tamahome
⭐⭐⭐⭐⭐
Posté le 17-04-2007 à 07:15:42  profilanswer
 

je drapalise


---------------
Hobby eien /人◕ ‿‿ ◕人\

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  jme sens 1 peu con lol

 

Sujets relatifs
[Delphi Personnal] Utilisation non commerciale : sens exactsens de [...] ? [résolu]
[Prolog] Instanciation au sens de la prog impérative ?Sens du mot clé protected ?
JOCE !!!!!! Ce forum plante dans tous les sens, c'est n'importe quoi !Pour ou contre les logiciel libre (au sens FSF) ?
transformer les caractères ayant un sens "spécial" en HTMLCopie de fichier (au sens cp Unix)
sun RPC : envoyer des messages dans l'autre senschanger le "sens" d'une page html?
Plus de sujets relatifs à : jme sens 1 peu con lol


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)