Accueil > > > NOUVEL ALGORITHME D'ENCRYPTION-DÉSENCRYPTION DYNAMIQUE (INFAILLIBLE)
NOUVEL ALGORITHME D'ENCRYPTION-DÉSENCRYPTION DYNAMIQUE (INFAILLIBLE)
Information sur la source
Description
Voici un nouvel algoritme d'encryption / désencryption qui est virtuellement incassable. Celui-ci utilise un vecteur d'initialisation de 2048 bits. Donc cassable par brute-force uniquement. Je n'encode pas par BLOCS.... donc impossible de déterminer la clef en analysant des parties du fichier encrypté. Je simule un masque jetable. Donc j'ai les avantages du masque jetable sans les inconvénients d'avoir une clef aussi longue que le fichier. Voir P.J. Document word
Source
- #include <windows.h>
-
- //Fonctions Thread
- DWORD WINAPI ThreadAC(LPVOID lpParam); //Thread qui s'occupe de vérifier l'état de l'interrupteur
-
- class kaboomClass
- {
- private:
-
- DWORD ThreadID; //Thread
- HANDLE ThreadHandle;
-
-
- unsigned char CLEFS[256]; //Clefs sous forme d'OCTET
- bool CLEFS_B[256][8]; //Clefs sous forme de BITS
- //Clef d'encryption actuelle
- bool CLEF_ACTUELLE_B[8];
- unsigned char CLEF_ACTUELLE;
- unsigned char MIXKEY[8]; //indique les bits de quelle clefs à prendre (DÉPART)
- int COMPTEUR_METHODE;
- int METHODES[4]; //Indique l'ordre des méthodes a prendre (256 possibles sauf elles ne seront pas toutes prises)
-
-
- public:
- bool threadOK;
- int pourcent;
-
- kaboomClass();
- ~kaboomClass();
- void octetToBits(const unsigned char*, bool*);
- void afficherBits(bool*);
- unsigned char bitsToOctet(bool*);
- void genererClefs();
- void mixClef();
- void nextMasq();
- void afficherMasque();
- void backupKeys();
- void getKeys();
- void ENCRYPTE();
- void DECRYPTE();
- void initialiser();
-
- }*kaboom;
-
-
- kaboomClass::kaboomClass()
- {
- pourcent=0;
- threadOK=true;
- //ThreadHandle=CreateThread(NULL,NULL,ThreadAC,NULL,NULL,&ThreadID);
- }
-
-
- kaboomClass::~kaboomClass()
- {
- threadOK=false;
- TerminateThread(ThreadHandle,NULL);
- }
-
-
-
- //Extraire les 8 bits d'un octet
- void kaboomClass::octetToBits(const unsigned char *octet, bool *bits) //OK FINAL
- {
- unsigned char a;
- a=octet[0];
- for (int x = 0; x <= 7; x++)
- {
- bits[x] = a & 1;
- a = a >> 1;
- }
- return;
- }
-
- //Création d'un octet avec 8 bits
- unsigned char kaboomClass::bitsToOctet(bool *bits) //OK FINAL
- {
- unsigned char byte=0;
- for (int x = 0; x <= 7; x++)
- {
- if(bits[x])
- byte+=pow((double)2,x);
- }
- return byte;
- }
-
-
- void kaboomClass::mixClef()
- {
- for(int x=0;x<=7;x++)
- {
- CLEF_ACTUELLE_B[x]=CLEFS_B[MIXKEY[x]][x];
- }
- CLEF_ACTUELLE=bitsToOctet(CLEF_ACTUELLE_B);
- }
-
- //Simulation d'une seule méthode pour le moment
- void kaboomClass::nextMasq()
- {
- //Copy du masque de mélange actuel
- unsigned char temp[8];
- for(int x=0;x<=7;x++)
- temp[x]=MIXKEY[x];
-
- //Copy des méthodes
- int temp2[4];
- for(int x=0;x<=3;x++)
- temp2[x]=METHODES[x];
-
- switch(METHODES[COMPTEUR_METHODE])
- {
- case 1: //Méthode #1 = inversion totale
- {
- MIXKEY[0]=temp[4]+3;
- MIXKEY[1]=temp[5]+1;
- MIXKEY[2]=temp[0]+6;
- MIXKEY[3]=temp[3]-4;
- MIXKEY[4]=temp[1]+3;
- MIXKEY[5]=temp[2];
- MIXKEY[6]=temp[6]+2;
- MIXKEY[7]=temp[7];
- break;
- }
- case 25: //Méthode #25 : Inversion centrée
- {
- MIXKEY[0]=temp[2]-8;
- MIXKEY[1]=temp[4]+2;
- MIXKEY[2]=temp[3]+2;
- MIXKEY[3]=temp[0]+43;
- MIXKEY[4]=temp[1]-98;
- MIXKEY[5]=temp[5]+54;
- MIXKEY[6]=temp[6]+15;
- MIXKEY[7]=temp[7]-32;
- break;
- }
- case 52: //Méthode #52 : Changement de clefs
- {
- MIXKEY[0]=temp[0]+1;
- MIXKEY[1]=temp[1]-2;
- MIXKEY[2]=temp[2]-2;
- MIXKEY[3]=temp[3]+16;
- MIXKEY[4]=temp[4]+2;
- MIXKEY[5]=temp[5]-1;
- MIXKEY[6]=temp[6]+2;
- MIXKEY[7]=temp[7]-4;
- break;
- }
- case 55: //Méthode #55 : Inverser Méthodes ???
- {
- METHODES[0]=temp2[2];
- METHODES[1]=temp2[3];
- METHODES[2]=temp2[0];
- METHODES[3]=temp2[2];
- break;
- }
- default: //Méthode inconnue = inversion des paires
- {
- MIXKEY[0]=temp[5];
- MIXKEY[1]=temp[0];
- MIXKEY[2]=temp[4];
- MIXKEY[3]=temp[1];
- MIXKEY[4]=temp[2];
- MIXKEY[5]=temp[3];
- MIXKEY[6]=temp[6];
- MIXKEY[7]=temp[7];
- break;
- }
- }
-
- COMPTEUR_METHODE++;
- if(COMPTEUR_METHODE>3)
- COMPTEUR_METHODE=0;
- }
- //###################################################################
-
- //Générer des clefs de façon aléatoire
- void kaboomClass::genererClefs() //OK
- {
- srand(time(NULL));
- for(int x=0;x<=255;x++)
- {
- CLEFS[x]=rand() % 256;
- octetToBits(&CLEFS[x],CLEFS_B[x]);
- }
-
- for(int x=0;x<=7;x++)
- MIXKEY[x]=rand() % 256;
-
- //****************
- METHODES[0]=1;
- METHODES[1]=25;
- METHODES[2]=52;
- METHODES[3]=55;
-
- backupKeys();
- return;
- }
-
-
- //Enregistrer les clefs
- void kaboomClass::backupKeys()
- {
- char position[15]={"kabz.kbk"};
- char *nomFichier=position;
-
- ofstream fichier(nomFichier,ios::ate|ios::binary);
-
- //Enregistre les 256 clefs
- for(int x=0;x<=255;x++)
- fichier.write((char*)&CLEFS[x],sizeof(CLEFS[x]));
- //Enregistre le masque
- for(int x=0;x<=7;x++)
- fichier.write((char*)&MIXKEY[x],sizeof(MIXKEY[x]));
- //Enregistre la séquence des méthodes
- for(int x=0;x<=3;x++)
- fichier.write((char*)&METHODES[x],sizeof(METHODES[x]));
- fichier.close();
- return;
- }
-
- //Récupérer les clefs
- void kaboomClass::getKeys()
- {
- char position[15]={"kabz.kbk"};
- char *nomFichier=position;
-
- ifstream fichier(nomFichier,ios::binary);
-
- //OBTENIR LONGUEUR FICHIER
- fichier.seekg(0, ios::end);
- double longFich=fichier.tellg();
- fichier.seekg(0, ios::beg);
-
- if((longFich>0))
- {
- //Récupère les 256 clefs
- for(int x=0;x<=255;x++)
- {
- fichier.read((char*)&CLEFS[x],sizeof(CLEFS[x]));
- octetToBits(&CLEFS[x],CLEFS_B[x]);
- }
- //Récupère le masque
- for(int x=0;x<=7;x++)
- fichier.read((char*)&MIXKEY[x],sizeof(MIXKEY[x]));
- //Récupère la séquence des méthodes
- for(int x=0;x<=3;x++)
- fichier.read((char*)&METHODES[x],sizeof(METHODES[x]));
- }
- fichier.close();
- return;
- }
-
- //###################################################################
-
- void kaboomClass::ENCRYPTE()
- {
- pourcent=0;
- COMPTEUR_METHODE=0;
- genererClefs();
-
- char position[15]={"test.mp3"};
- char *nomFichier=position;
- ifstream fichier(nomFichier,ios::binary);
-
- char position2[15]={"crypted.kbm"};
- char *nomFichier2=position2;
- ofstream fichier2(nomFichier2,ios::binary|ios::ate);
-
- char position3[15]={"masque.kbm"};
- char *nomFichier3=position3;
- ofstream fichier3(nomFichier3,ios::binary|ios::ate);
-
- //OBTENIR LONGUEUR FICHIER
- fichier.seekg(0, ios::end);
- double longFich=fichier.tellg();
- fichier.seekg(0, ios::beg);
-
- unsigned char donnee;
-
- if((longFich>0))
- {
- while(!fichier.eof())
- {
- mixClef();
- fichier.read((char*)&donnee,sizeof(donnee));
-
- donnee = donnee ^ CLEF_ACTUELLE;
- //Écriture de la donnée encryptée
- fichier2.write((char*)&donnee,sizeof(donnee));
- //Écriture du masque jetable
- fichier3.write((char*)&CLEF_ACTUELLE,sizeof(CLEF_ACTUELLE));
-
- //pourcent = fichier.tellg() / longFich * 100;
-
- nextMasq();
- }
- }
- fichier.close();
- fichier2.close();
- fichier3.close();
- return;
- }
-
-
- void kaboomClass::DECRYPTE()
- {
- pourcent=0;
- COMPTEUR_METHODE=0;
- getKeys();
-
- char position[15]={"crypted.kbm"};
- char *nomFichier=position;
- ifstream fichier(nomFichier,ios::binary);
-
- char position2[15]={"decrypted.mp3"};
- char *nomFichier2=position2;
- ofstream fichier2(nomFichier2,ios::binary|ios::ate);
-
- //OBTENIR LONGUEUR FICHIER
- fichier.seekg(0, ios::end);
- double longFich=fichier.tellg();
- fichier.seekg(0, ios::beg);
-
- unsigned char donnee;
-
- if((longFich>0))
- {
- while(!fichier.eof())
- {
- mixClef();
- fichier.read((char*)&donnee,sizeof(donnee));
-
- donnee = donnee ^ CLEF_ACTUELLE;
-
- fichier2.write((char*)&donnee,sizeof(donnee));
-
- //pourcent = fichier.tellg() / longFich * 100;
-
- nextMasq();
- }
- }
- fichier.close();
- fichier2.close();
- return;
- }
-
- DWORD WINAPI ThreadAC(LPVOID lpParam)
- {
- while(kaboom->threadOK) //Serveur tout le temps en fonction (à date)
- {
- system("cls");
- cout << kaboom->pourcent << "%";
- Sleep(100);
- }
- return 0;
- }
#include <windows.h>
//Fonctions Thread
DWORD WINAPI ThreadAC(LPVOID lpParam); //Thread qui s'occupe de vérifier l'état de l'interrupteur
class kaboomClass
{
private:
DWORD ThreadID; //Thread
HANDLE ThreadHandle;
unsigned char CLEFS[256]; //Clefs sous forme d'OCTET
bool CLEFS_B[256][8]; //Clefs sous forme de BITS
//Clef d'encryption actuelle
bool CLEF_ACTUELLE_B[8];
unsigned char CLEF_ACTUELLE;
unsigned char MIXKEY[8]; //indique les bits de quelle clefs à prendre (DÉPART)
int COMPTEUR_METHODE;
int METHODES[4]; //Indique l'ordre des méthodes a prendre (256 possibles sauf elles ne seront pas toutes prises)
public:
bool threadOK;
int pourcent;
kaboomClass();
~kaboomClass();
void octetToBits(const unsigned char*, bool*);
void afficherBits(bool*);
unsigned char bitsToOctet(bool*);
void genererClefs();
void mixClef();
void nextMasq();
void afficherMasque();
void backupKeys();
void getKeys();
void ENCRYPTE();
void DECRYPTE();
void initialiser();
}*kaboom;
kaboomClass::kaboomClass()
{
pourcent=0;
threadOK=true;
//ThreadHandle=CreateThread(NULL,NULL,ThreadAC,NULL,NULL,&ThreadID);
}
kaboomClass::~kaboomClass()
{
threadOK=false;
TerminateThread(ThreadHandle,NULL);
}
//Extraire les 8 bits d'un octet
void kaboomClass::octetToBits(const unsigned char *octet, bool *bits) //OK FINAL
{
unsigned char a;
a=octet[0];
for (int x = 0; x <= 7; x++)
{
bits[x] = a & 1;
a = a >> 1;
}
return;
}
//Création d'un octet avec 8 bits
unsigned char kaboomClass::bitsToOctet(bool *bits) //OK FINAL
{
unsigned char byte=0;
for (int x = 0; x <= 7; x++)
{
if(bits[x])
byte+=pow((double)2,x);
}
return byte;
}
void kaboomClass::mixClef()
{
for(int x=0;x<=7;x++)
{
CLEF_ACTUELLE_B[x]=CLEFS_B[MIXKEY[x]][x];
}
CLEF_ACTUELLE=bitsToOctet(CLEF_ACTUELLE_B);
}
//Simulation d'une seule méthode pour le moment
void kaboomClass::nextMasq()
{
//Copy du masque de mélange actuel
unsigned char temp[8];
for(int x=0;x<=7;x++)
temp[x]=MIXKEY[x];
//Copy des méthodes
int temp2[4];
for(int x=0;x<=3;x++)
temp2[x]=METHODES[x];
switch(METHODES[COMPTEUR_METHODE])
{
case 1: //Méthode #1 = inversion totale
{
MIXKEY[0]=temp[4]+3;
MIXKEY[1]=temp[5]+1;
MIXKEY[2]=temp[0]+6;
MIXKEY[3]=temp[3]-4;
MIXKEY[4]=temp[1]+3;
MIXKEY[5]=temp[2];
MIXKEY[6]=temp[6]+2;
MIXKEY[7]=temp[7];
break;
}
case 25: //Méthode #25 : Inversion centrée
{
MIXKEY[0]=temp[2]-8;
MIXKEY[1]=temp[4]+2;
MIXKEY[2]=temp[3]+2;
MIXKEY[3]=temp[0]+43;
MIXKEY[4]=temp[1]-98;
MIXKEY[5]=temp[5]+54;
MIXKEY[6]=temp[6]+15;
MIXKEY[7]=temp[7]-32;
break;
}
case 52: //Méthode #52 : Changement de clefs
{
MIXKEY[0]=temp[0]+1;
MIXKEY[1]=temp[1]-2;
MIXKEY[2]=temp[2]-2;
MIXKEY[3]=temp[3]+16;
MIXKEY[4]=temp[4]+2;
MIXKEY[5]=temp[5]-1;
MIXKEY[6]=temp[6]+2;
MIXKEY[7]=temp[7]-4;
break;
}
case 55: //Méthode #55 : Inverser Méthodes ???
{
METHODES[0]=temp2[2];
METHODES[1]=temp2[3];
METHODES[2]=temp2[0];
METHODES[3]=temp2[2];
break;
}
default: //Méthode inconnue = inversion des paires
{
MIXKEY[0]=temp[5];
MIXKEY[1]=temp[0];
MIXKEY[2]=temp[4];
MIXKEY[3]=temp[1];
MIXKEY[4]=temp[2];
MIXKEY[5]=temp[3];
MIXKEY[6]=temp[6];
MIXKEY[7]=temp[7];
break;
}
}
COMPTEUR_METHODE++;
if(COMPTEUR_METHODE>3)
COMPTEUR_METHODE=0;
}
//###################################################################
//Générer des clefs de façon aléatoire
void kaboomClass::genererClefs() //OK
{
srand(time(NULL));
for(int x=0;x<=255;x++)
{
CLEFS[x]=rand() % 256;
octetToBits(&CLEFS[x],CLEFS_B[x]);
}
for(int x=0;x<=7;x++)
MIXKEY[x]=rand() % 256;
//****************
METHODES[0]=1;
METHODES[1]=25;
METHODES[2]=52;
METHODES[3]=55;
backupKeys();
return;
}
//Enregistrer les clefs
void kaboomClass::backupKeys()
{
char position[15]={"kabz.kbk"};
char *nomFichier=position;
ofstream fichier(nomFichier,ios::ate|ios::binary);
//Enregistre les 256 clefs
for(int x=0;x<=255;x++)
fichier.write((char*)&CLEFS[x],sizeof(CLEFS[x]));
//Enregistre le masque
for(int x=0;x<=7;x++)
fichier.write((char*)&MIXKEY[x],sizeof(MIXKEY[x]));
//Enregistre la séquence des méthodes
for(int x=0;x<=3;x++)
fichier.write((char*)&METHODES[x],sizeof(METHODES[x]));
fichier.close();
return;
}
//Récupérer les clefs
void kaboomClass::getKeys()
{
char position[15]={"kabz.kbk"};
char *nomFichier=position;
ifstream fichier(nomFichier,ios::binary);
//OBTENIR LONGUEUR FICHIER
fichier.seekg(0, ios::end);
double longFich=fichier.tellg();
fichier.seekg(0, ios::beg);
if((longFich>0))
{
//Récupère les 256 clefs
for(int x=0;x<=255;x++)
{
fichier.read((char*)&CLEFS[x],sizeof(CLEFS[x]));
octetToBits(&CLEFS[x],CLEFS_B[x]);
}
//Récupère le masque
for(int x=0;x<=7;x++)
fichier.read((char*)&MIXKEY[x],sizeof(MIXKEY[x]));
//Récupère la séquence des méthodes
for(int x=0;x<=3;x++)
fichier.read((char*)&METHODES[x],sizeof(METHODES[x]));
}
fichier.close();
return;
}
//###################################################################
void kaboomClass::ENCRYPTE()
{
pourcent=0;
COMPTEUR_METHODE=0;
genererClefs();
char position[15]={"test.mp3"};
char *nomFichier=position;
ifstream fichier(nomFichier,ios::binary);
char position2[15]={"crypted.kbm"};
char *nomFichier2=position2;
ofstream fichier2(nomFichier2,ios::binary|ios::ate);
char position3[15]={"masque.kbm"};
char *nomFichier3=position3;
ofstream fichier3(nomFichier3,ios::binary|ios::ate);
//OBTENIR LONGUEUR FICHIER
fichier.seekg(0, ios::end);
double longFich=fichier.tellg();
fichier.seekg(0, ios::beg);
unsigned char donnee;
if((longFich>0))
{
while(!fichier.eof())
{
mixClef();
fichier.read((char*)&donnee,sizeof(donnee));
donnee = donnee ^ CLEF_ACTUELLE;
//Écriture de la donnée encryptée
fichier2.write((char*)&donnee,sizeof(donnee));
//Écriture du masque jetable
fichier3.write((char*)&CLEF_ACTUELLE,sizeof(CLEF_ACTUELLE));
//pourcent = fichier.tellg() / longFich * 100;
nextMasq();
}
}
fichier.close();
fichier2.close();
fichier3.close();
return;
}
void kaboomClass::DECRYPTE()
{
pourcent=0;
COMPTEUR_METHODE=0;
getKeys();
char position[15]={"crypted.kbm"};
char *nomFichier=position;
ifstream fichier(nomFichier,ios::binary);
char position2[15]={"decrypted.mp3"};
char *nomFichier2=position2;
ofstream fichier2(nomFichier2,ios::binary|ios::ate);
//OBTENIR LONGUEUR FICHIER
fichier.seekg(0, ios::end);
double longFich=fichier.tellg();
fichier.seekg(0, ios::beg);
unsigned char donnee;
if((longFich>0))
{
while(!fichier.eof())
{
mixClef();
fichier.read((char*)&donnee,sizeof(donnee));
donnee = donnee ^ CLEF_ACTUELLE;
fichier2.write((char*)&donnee,sizeof(donnee));
//pourcent = fichier.tellg() / longFich * 100;
nextMasq();
}
}
fichier.close();
fichier2.close();
return;
}
DWORD WINAPI ThreadAC(LPVOID lpParam)
{
while(kaboom->threadOK) //Serveur tout le temps en fonction (à date)
{
system("cls");
cout << kaboom->pourcent << "%";
Sleep(100);
}
return 0;
}
Conclusion
Veuillez lire le tutoriel .DOC que j'ai inclu dans le ZIP.
Sérieusement, je ne sais pas si j'ai inventé de quoi ou bien je suis dans les patates.
En tout cas; je SAIS QUE CELA FONCTIONNE #1.
J'Ai encrypté un fichier de 1 meg avec seulement des "00" dedant et le fichier crypté est méconnaissable !!
Bonne découverte... !
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Encryption 128 bit [ par GEDEON ]
Quelqu'un aurait-il des informations pour encrypter un fichier en c++ ???? et de préférence en 128 bits... toutes les informations sont les bienvenues
Encryption 128 bit [ par GEDEON ]
Quelqu'un aurait-il des informations pour encrypter un fichier en c++ ???? et de préférence en 128 bits... toutes les informations sont les bienvenues
cryptage RSA [ par moicmoi ]
Bon je me doute que je vais passer pour un boulet mais j'aurai besoin avant jeudi d'un code source du cryptage RSA en LANGAGE C. Mais un code tout si
Cryptage RSA [ par ritchie00 ]
Salut,Qqun saurait où je peux trouver une API C++ de chiffrement/dechiffrement RSA, qui marcherait avec des certificats et des tailles de clés paramét
Pb de sécurité... [ par wanny ]
Bonjour.Je travaille sur une nouvelle version d'un logiciel commercial.Actuellement, la licence de ce logiciel est généré en fonction du nom de la mac
Le cryptage par MD5 de RSA [ par LSRS ]
Salut tout le monde...J'ai un très grand problème avec l'algorithme de hachage MD5 qui réprésente le squelette de mon stage d'été... Je n'arrive pas à
sécurité contre les boucles infinies? [ par mikolaj ]
Salut,je développe en C sous Mac osX et j'implémente actuellement un programme utilisant des nombres générés par random qui sont ensuite rejetés ou c
Projet de sécurité [ par UniCyclon ]
Salut,Je représente Sy-Labs, une assoc globale basée sur les technologies informatiques, et plus particulièrement Subria, qui a pour but d'augmenter l
Amateur de stéganographie et de sécurité ? [ par NikatorS ]
A tous ceux qui se pationne de stéganographie, je continu un projet qui me tien à coeur : caché toujours mieux des données.Je viens d'améliorer un pro
RSA [ par james007bond1980 ]
Bonjour à tous et à toutes!je souhaite coder et décoder un mot par exemple:"salut" avec le cryptage RSA en C.Comment faire? je sui
|
Derniers Blogs
ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0 par Philess
L'extensibilité du Team Web Access
Le Web Access (site d'équipe) de Team Foundation Server a été complètement réécrit dans la version 2012 avec pas moins de 400.000 lignes de JavaScript. Ce nouveau modèle a été pensé pour offrir de grandes...
Cliquez pour lire la suite de l'article par Philess SIMULER FACILEMENT L'ENVOI DE MAILSIMULER FACILEMENT L'ENVOI DE MAIL par JeremyJeanson
il m'a été demandé, à plusieurs reprises, comment je faisais pour simuler l'envoi de mail lors de mes démos de Workflow Foundation. Ma solution est plutôt simple : j'utilise la configuration par défaut du SmtpClient et j'oriente les mails vers un dossier ...
Cliquez pour lire la suite de l'article par JeremyJeanson VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Forum
PB PACMAN C++PB PACMAN C++ par garfield95
Cliquez pour lire la suite par garfield95
Logiciels
Easy-Planning (4.5.0.11)EASY-PLANNING (4.5.0.11)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté a... Cliquez pour télécharger Easy-Planning CVEasy (3.1.0.51)CVEASY (3.1.0.51)PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante.
PHMSD-C... Cliquez pour télécharger CVEasy LettresFaciles 2011 (8.6.0.31)LETTRESFACILES 2011 (8.6.0.31)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011 sDEVIS-FACTURES vlPRO (8.4.2.62)SDEVIS-FACTURES VLPRO (8.4.2.62)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO Devis-Factures PHMSD (2.1.0.11)DEVIS-FACTURES PHMSD (2.1.0.11)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD
|