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.
18 mai 2006 à 19:50
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
30 mai 2005 à 18:39
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
28 avril 2004 à 10:32
28 avril 2004 à 00:57
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.
27 avril 2004 à 15:03
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.