Cryptage avec un endomorphisme involutif

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 163 fois - Téléchargée 24 fois

Contenu du snippet

L'usage des involution peut avoir de nombreux interets. Par exemple en avoir une en cryptage permet de n'utiliser qu'une seule fonction pour coder et decoder

Ici j'utilise la transposée matricielle comme involution. C'est un cryptage simple , mais qui peut derouter au début. L'interet de ce code est que plus la phrase est longue plus le cryptage est performant.

Source / Exemple :


alias -l involution {
  var %i = 1 , %i0 = 1 , %i1 = 1 , %i2 = 1 , %i3 = 1 
  hadd -m crypte max 0
  while ($gettok($1-,%i,32)) { if ( $len($ifmatch) > $hget(crypte,max) ) { hadd -m crypte max $ifmatch } | inc %i }
  while ($gettok($1-,%i0,32)) {  hadd -m crypte m- $+ %i0 $ifmatch $+ $str($chr(1),$calc($hget(crypte,max) - $len($ifmatch))) | inc %i0 }
  while ( %i1 <= $hget(crypte,max) ) { 
    var %i2 = 1 
    while ( %i2 <= $gettok($1-,0,32) ) { hadd -m crypte t- $+ %i1 $hget(crypte,t- $+ %i1) $+ $mid($hget(crypte,m- $+ %i2),%i1,1) | inc %i2 } 
    inc %i1
  }
  while ( $hget(crypte,t- $+ %i3) ) { hadd -m crypte return $hget(crypte,return) $ifmatch | inc %i3 }
}

alias crypte_invo {
  if ( $hget(crypte).size > 0 ) { hfree crypte }
  hmake -m crypte 100
  $involution($1-)
  return $remove($hget(crypte,return),$chr(1))
}

Conclusion :


pour voir le code a l'oeuvre :

//echo -a $crypte_invo(votre phrase)

Comment ça marche ?
je prend une phrase quelconque
je la transforme en matrice ou chaque mot devient une ligne
je complete la matrice avec des zeros
je transpose la matrice
je dis que chaque ligne de la nouvelle matrice forme un mot
et je stoke le tout sous la forme d'une phrase que je retourne.

Je ne pense pas que ce code soit tres performant , je pense que quelqu'un de bien entraînné avec un bon niveau en math pourrait le casser sans trop de mal. Mais entre amis ou juste pour ne pas etre compris ce code peut etre utile. Et surtout il montre a quoi peut servir un cour d'algèbre.

On pourrait rendre le code plus puissant en transformant chaque lettre en sa valeur ascii ou jouer sur d'autre parametre, mais le bit est de montrer une involution.

A voir également

Ajouter un commentaire

Commentaires

Mind4130
Messages postés
5
Date d'inscription
dimanche 22 mai 2005
Statut
Membre
Dernière intervention
31 août 2007

En lisant le "je pense que quelqu'un de bien entraînné avec un bon niveau en math pourrait le casser sans trop de mal." jme suis dit que comme j'y connait vraiment rien en maths, que mon niveau de scripting est loin d'exeller et que j'ai jamais utilisé de hash tables, ça risquait d'être un défi assez marrant et donc je regarde vite fait comment marche ce bordel avec $crypte_invo(test matrice involution) et je fais rapidement cet alias:
alias breakinvo {
var %z $len($1), %ù $numtok($1-,32), %k $1-, %u 1, %ù^ %z, %return
while (%ù) {
if ($len($gettok(%k,%ù,32)) !%z) { %k $instok(%k,$str($chr(149),$calc(%z - $ifmatch)),%ù,32) }
dec %ù
}
%k = $replace(%k,$+($chr(149),$chr(32)),$chr(149))
var %i 1, %ù $numtok(%k,32)
if ($hget(breakinvo).size) { hfree breakinvo }
hmake -m breakinvo 100
while (%z) {
while (%i <= %ù) { hadd -m breakinvo $+(bi,%z) $+($hget(breakinvo,$+(bi,%z)),$mid($gettok(%k,%i,32),%z,1)) | inc %i }
%ù = $numtok(%k,32)
%i = 1
dec %z
}
; hsave breakinvo $+(breakinvo,$r(1,999),.txt)
%i = 1
while (%i <%ù^) { %return $instok(%return,$hget(breakinvo,$+(bi,%i)),%i,32) | inc %i }
echo -a $remove(%return,$chr(149))
}

Et c'est avec une jubilation humide que je contemple le "tmi ean stv tro il cu et i o n" redevenir "test matrice involution", et c'est avec un soupir profond qu'au terme d'autre test je m'apperçoit qu'en fait ça marche que sur cette phrase. J'en conclus qu'il est impossible de casser le cryptage, du moins avec mon experience relativement limitée du mirc, pourquoi ?
L'alias rajoute des $chr(1) pour que tout les mots de la phrase aient le même nombre de caracteres et faire un tableau régulier puis les supprime une fois "l'involution" faite, c'est donc (a mon humble avis) impossible de prédire où les remettre pour refaire le tableau original puisque le rendu n'est pas logique (a moins de retourner les $chr(1) avec le reste), et mon alias de decryptage ne peut marcher seulement si le nombre de chr des mots va croissant ou décroissant, comme dans mon test. Néanmois je me suis quand même bien amusé sur ce code qui m'a finalement servi de tutorial pour hash table :p (même si je suis vachement frustré).

Parcontre je serais très contant si quelqu'un me cloue le bec et me prouve que c'est faisable :p
cs_Lucifer666
Messages postés
2
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
30 mai 2005

Eh eh comme on se retrouve MorTLStValent1
Moi aussi kerrigan j'ai compris ton code, et j'aprecis que quelqu'un s'attache a montere l'utilité des maths en informatique
Le truc qui aurrait etait bien c'est trouver une matrice nilpoltante en fonction d'une clée, comme sa le code serait moins cassable, mais bon c'est chaud de faire ca.

En tout cas tres bonne idée
MorTLStValent1
Messages postés
24
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
1 janvier 2005

Je n'ai pas encore les connaissances mathematiques pour t'aider en homeomorphisme, je ne connais pas les nuplets. En tout cas bonne continuation !!!
Kerrigan
Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005

ben j'ai fait un addon pour que le mirc gere les matrices ... je trouvais que ça manquait alors je l'ai codé

www.ircfr.com/code.aspx?ID=20731

jette un coup d'oeil ça peut tjs te servir. c'est encore incomplet, il manque la trace , et la methode d'inversion des matrices est nulle. Je vais changer ça bientot

je vais aussi optimiser le code en passant tout en hashtable, tout en gardant un fichier ini deriere pour la sauvegarde. ya un projet d'interface aussi mais je ne vois pas encore comment faire...

le prochain cryptage que j'ai en projet utilisera un homeomorphisme :
celui qui permet de d'associer a un nuplet un module et des arguments grace au théorème du relèvement. ( disont que en 2d ça serait un passage en coordonnée polaire pour faire simple)

faut que je vois si ça marche et si en mirc le chemin est vraiment bijectif.. vue que ça arrondit les calculs je pourrais perdre de l'info en chemin.
MorTLStValent1
Messages postés
24
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
1 janvier 2005

Si si j'ai le concours de l'ecole des mines je suis en 1ere année de CPGE mdr, tu vois je revise en cherchant a comprendre ton algo c'est que j'aurai au moins assimilé les endomorphismes, isomorphismes, automorphismes et toutes les notions de structure d'algebre lineaire rien qu'avec un algo de cryptage mdr. Moi qui pensait galerer en maths, ca fait plaisir de voir que je sais des choses lol et ca me rassure pour ce concours :)

Bonne journée a toi, et si g le temps j'essaierai ptete de faire un algo de cryptage avec le theoreme des restes chinois ou avec des restes de division euclidienne (faut que je trouve le temps :-\ ...). Deja la j'essaie de faire fonctionner un compteur de kicks pour chaque $address($knick,2) avec des hash donc des matrices n,2. Ce qui est dommage c de ne pas pouvoir faire de matrices n,p notamment n,n pour d'eventuelles simplifications ou pour utiliser les algebres TI (triangle inferieur) et TS (triangle superieur) dans les matrices (ce qui pourrait la simplifier) pour des algo de cryptage une fois de plus, ou pour des resolutions d'equations, ca aurait pu etre sympa de faire un dialog qui resoud des systemes d'equations lineaires !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.