Autorisation : Membre
Nb de messages : 84
Inscrit le : Dim 15 Mai 2011, 11:33
Posté le : Dim 15 Mai 2011, 12:07
Salut à tous,
Voici mon premier post sur ce forum, et ceci pour vous poster un petit alogrithme de cryptage. Son principe est simple:
- À chaque caractère d'une chaîne, commune à toute machine, est attribué un code (01,02,03....n)
- Une chaîne entrée par l'utilisateur est coupée en morceaux de 4 caractères
- Chaque morceau de chaîne est traduit sous forme d'une concaténation de ces codes (05 - 12 - 22 - 29 - 18 => 0512222918)
- Cette concaténation est divisée n fois par une clé secrète, entrée par l'utilisateur, par exemple 218, jusqu'à prendre une valeur inférieure à 10000
- Le nombre de fois où la concaténation a été divisée est inscrite en tête du résultat (par exemple 12)
- Le nombre de chiffres contenu dans la puissance de division est inscrit en te de tout le nombre précédemment calculé (12 contient 2 chiffres, le nombre final commencera donc par 212)
- Le résultat final sera affiché à l'utilisateur qui devra le recopier sur un papier ou autre, puis le donner à son destinataire (il s'affiche sur deux lignes, mais il s'ait d'un nombre unique)
Le décryptage fait l'inverse: il retrouve la puissance à laquelle il va falloir élever la clé secrète et multiplier le code pour retrouver la séquence de caractères.
Assez de blabla, voici le programme:
Code
prgmCRYPT - TI-82 encryption system (c) 2011 Cocodidou
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
EffEcr
Disp "TI-BASIC"
Disp "ENCRYPTION SYST"
Disp "(C) COCODIDOU"
"AZERTYUIOPQSDFGHJKLMWXCVBN:[theta]?! ,1234567890'[pi].()n+-*/e"->Chaîne2
Input "PRE-SHARED KEY? ",K
Menu("MODE","ENCRYPTION",E,"DECRYPTION",D)
Lbl E
EffEcr
1->A
{0}->L1
Disp "GENERATING SUBS"
While A<longueur(Chaîne2)
A->L1(A)
A+1->A
End
partEnt(log(max(L1))+1)->L
EffEcr
Input "PHRASE:",Chaîne1
EffEcr
Disp "ENCRYPTING..."
1->[theta]
{0}->L3
While [theta]<longueur(Chaîne1)-1
If [theta]+4[>=]longueur(Chaîne1)-1:Then
sous-Chaîne(Chaîne1,[theta],longueur(Chaîne1)-[theta]+1))->Chaîne4
Else
sous-Chaîne(Chaîne1,[theta],4)->Chaîne4
End
1->A
0->T
{0}->L2
While A<longueur(Chaîne4)+1
1->B
While sous-Chaîne(Chaîne4,A,1)[!=]sous-Chaîne(Chaîne2,B,1) et B<longueur(Chaîne2)-1
B+1->B
End
L1(B)->L2(A)
A+1->A
End
For(A,1,dim(L2))
10^(L)*(T+10^(-L)*L2(A))->T
End
0->P
While T>10000
T/K->T
P+1->P
End
If P=0:Then
T/K->T
P+1->P
T+11->T
End
partEnt(log(P)+1)->Q
Q*10^(Q)+P->P
If partEnt(T)[>=]1:Then
P*10^(partEnt(log(partEnt(T))+1))+T->T
End
partEnt(T)->L3(dim(L3)+1)
partDéc(T)->L3(dim(L3)+1)
[theta]+4->[theta]
End
EffEcr
Disp "CODES:"
For([theta],2,dim(L3),2)
Output(3,1," ")
Output(4,1," ")
Output(5,1," ")
Output(3,1,"CODE")
Output(3,6,([theta]/2))
Output(3,9,"OF")
Output(3,12,(dim(L3)-1)/2)
Output(4,1,L3([theta]))
Output(4,1,L3([theta]+1))
Output(8,1,"PRESS ENTER...")
Pause
End
EffEcr
""->Chaîne1
""->Chaîne4
0->K
EffListe L1
EffListe L2
EffListe L3
Return
Lbl D
Input "HOW MANY CODES:",N
Disp "ENTER CODES..."
{0}->L3
For(Z,1,N)
Input X
X->L3(Z)
End
EffEcr
""->Chaîne1
Disp "DECRYPTING..."
1->Z
While Z<N+1
L3(Z)->C
partEnt(C)->E
partEnt(log(E)+1)->L
partEnt(C*10^(-L+1))->U
C-U*10^(L-1)->C
partEnt(C*10^(-L+U+1))->P
C-P*10^(L-U-1)->C
arrondi(C*K^P,0)->C
partEnt(log(longueur(Chaîne2))+1)->M
partEnt(log(partEnt(C))+1)->L
If pgcd(L,M)=1:Then
L+1->L
End
0->F
C->T
T*10^(-L)->T
While F<L
T*10^(M)->T
F+M->F
partEnt(T)->H
If H<longueur(Chaîne2)-1 et H>0:Then
If longueur(Chaîne1)[!=]0:Then
Chaîne1+sous-Chaîne(Chaîne2,H,1)->Chaîne1
Else
sous-Chaîne(Chaîne2,H,1)->Chaîne1
End
End
If H[>=]longueur(Chaîne2)-1:Then
Goto M
End
T-partEnt(T)->T
End
Z+1->Z
End
EffEcr
Disp "PHRASE:"
Output(2,1,Chaîne1)
Return
Lbl M
EffEcr
Output(1,1,"DECRYPTION ERROR (WRONG KEY?)")
Output(8,1,"PRESS ENTER...")
Pause
EffEcr
Return
Bon courage pour tout entrer, j'ai créé ce programme en une soirée...
Je vous propose pour tester le programme de décoder la phrase suivante:
Code
Clé partagée:684
Nombre de codes:7
117431,49122807
1273,745983807
1225.824892702
114769,4502924
118918.87134503
1219.7990856161
121932.60582316
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 15 Mai 2011, 12:16
Je me demande comment tu traîtes les restes des divisions.
Tu m'intéresses.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 84
Inscrit le : Dim 15 Mai 2011, 11:33
Posté le : Dim 15 Mai 2011, 12:18
Citer : linkakro
Je me demande comment tu traîtes les restes des divisions.
Tu m'intéresses.
Ben le reste est affiché sous forme de décimales après la virgule
J'avais essayé de faire en sorte qu'il n'y ait pas de reste , mais j'avais tellement de fois un pgcd entre la clé et la séquence de codes égal à 1, que j'ai dû me résoudre à utiliser des décimales...
Vu que la machine à calculer est limitée à 10 décimales, je suis obligé de couper ma chaîne en blocs de 4 caractères, sinon le taux d'erreur est trop important. À 4 caractères, je n'ai pas eu d'erreurs à déplorer jusqu'à présent
Autorisation : Membre
Nb de messages : 717
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Dim 15 Mai 2011, 18:20
haha je suis mort de rire pour ton petit texte en english sur les droits... tu met a la premiere ligne un copyright et apres tu dis que le prog est libre hahaha
---------------------- retrouvez moi sur twitter!!!
Autorisation : Membre
Nb de messages : 84
Inscrit le : Dim 15 Mai 2011, 11:33
Posté le : Dim 15 Mai 2011, 21:11
Citer : Akmdad
haha je suis mort de rire pour ton petit texte en english sur les droits... tu met a la premiere ligne un copyright et apres tu dis que le prog est libre hahaha
Ben je mets tout sous GPL
La page <http://www.gnu.org/licenses/gpl-howto.html> stipule que:
Citer
Whichever license you plan to use, the process involves adding two elements to each source file of your program: a copyright notice (such as “Copyright 1999 Terry Jones”), and a statement of copying permission, saying that the program is distributed under the terms of the GNU General Public License (or the Lesser GPL).
The copyright notice should include the year in which you finished preparing the release (so if you finished it in 1998 but didn't post it until 1999, use 1998). You should add the proper year for each release; for example, “Copyright 1998, 1999 Terry Jones” if some versions were finished in 1998 and some were finished in 1999. If several people helped write the code, use all their names.
Autrement dit, pour ceux qui ne comprennent pas, je dois inclure une notice de copyright et un bloc de licence - C'est ici le cas
En conséquence, c'est bien du libre
Je mets ça systématiquement avant chaque bloc de code, de sorte à être sûr que ça y est bien, même si la licence n'a pas d'intérêt (on ne la recopie pas sur la machine à calculer ici )