Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Algorithme] Création d'un petit cryptage.

Tentative beaucoup trop linéaire.

17 novembre 2010 à 21:49:34

Bonjour,
pour m'occuper, j'ai décidé de tenter de créer un petit programme en python pour crypter une ligne avec une clé. Mon but était au début de faire un système qui utilise la clé pour chiffrer la chaîne de manière totalement incohérente avec les modulomes. (L'inverse de linéaire en gros)
Voici donc le système, qui néanmoins créer une suite que je trouve facile à casser (Il suffit d'avoir la longueur de la clé pour déchiffrer un message avec un petit brute-forcing)
Exemple (abcdef est la ligne à crypter et hgbx, la clé) :
0 1 2 3 4 5

a b c d e f  6 -> 6%4=2 (Ceci est le caractère qui va être chiffré, on prend donc sa valeur ascii décimal)
h g b x      4    99%4=3
on fait : c+x (valeur décimal)

a b d e f    5 -> 5%4=1 (C'est une simple soustraction...)
h g b x      4    98%4=2 (Encore pire, le caractère de la clé est aussi la soustraction, c'est donc linéaire avec un décalage de un cran)
on fait : c+x.b+b

Voici mon problème... comment rendre la réaction plus aléatoire ? Je pensais aussi retirer petit à petit les valeurs dans la clé, et une fois celle-ci totalement vide, je la restaurais, mais ceci ne fait qu'augmenter simplement le décalage qui reste le même.

Voilà ! Merci beaucoup !
  • Partager sur Facebook
  • Partager sur Twitter
18 novembre 2010 à 20:03:54

Pour moi, il faut changé de méthode de cryptage.
Tu peux utiliser le carré de vigenère ou si tu es motivé directement la méthode du système RSA. Cependant, cette dernière demande une certaine aisance en math.
  • Partager sur Facebook
  • Partager sur Twitter
18 novembre 2010 à 21:50:34

J'ai crée le début du système (Même si pour le moment, quelque valeur de la clé peut-être totalement oublié par le chiffrement). J'utilise en plus la chaîne md5 de la clé en passant donc par une autre manipulation, je vais voir pour le moment si je vais réussir à créer l'inverse, déchiffrer le mot de passe.
  • Partager sur Facebook
  • Partager sur Twitter
20 novembre 2010 à 17:01:36

Citation : Specula

ou si tu es motivé directement la méthode du système RSA. Cependant, cette dernière demande une certaine aisance en math.


RSA ne joue pas dans la même cour, c'est un système asymétrique, il ne répond pas à la même problématique ;)

jb1993, j'avoue que je ne comprends pas vraiment comment se déroule ton algorithme...
  • Partager sur Facebook
  • Partager sur Twitter
20 novembre 2010 à 21:53:17

Je ne compte pas refaire un algorithme qui existe déjà mais tenter d'en créer un, même s'il est très facilement cassable.
Concernant mon algorithme, voici le fonctionnement :
On a, une chaine, la clé et le md5 de la clé
On fait la longueur de la chaine multiplié par la longueur de la clé au modulome de la longueur du md5.
La valeur est un caractère md5, on prend donc la valeur ascii de celle-ci et on effectue un modulome dessus avec la longueur de la clé.
La valeur est le caractère de la clé qui servira à chiffrer un caractère de la chaine, on prend ensuite la valeur de celle-ci qu'on remet au modulome de la longueur de la chaine string afin d'obtenir le caractère qui sera crypté. On effectue ensuite une simple addition des deux valeurs et on l'ajoute à une chaine avec un espace pour les séparer.
On supprime ensuite le caractère dans le string et on réduit sa taille de 1... et on fait ceci en boucle.

J'ai pour le moment crée le fonctionnement de celle-ci en python, je rencontre uniquement un problème : j'ai la chaine décrypté, mais les caractères sont dans le désordre. Je suis en train de réfléchir à la technique pour résoudre le problème. (J'ai leur ancienne valeur de sélection... mais... Ca semble plus dure que je le pensais pour tout remettre en ordre, je réfléchis donc à un système pour le faire.

Pour les personnes qui n'ont pas compris, voici mon début de code pour crypter une chaine :
#!/usr/bin/python
import hashlib

def deleteIndex (string, index) :
	tmp = ''
	for i in range(len(string)) :
		if i != index :
			tmp = tmp + string[i]		
	return tmp
	
def mod (a, b) :
	if a > b :
		return a % b
	else :
		return b % a
	

string = 'un jolie test'; key = 'the key'; md5Key = hashlib.md5(key).hexdigest(); crypt = ''
stringLen = len(string); keyLen = len(key); md5Len = len(md5Key)

tmp = ''; tmpString = ''; tmpMd5 = ''; tmpKey = ''

while stringLen != 0 :
	tmp = mod(stringLen * keyLen, md5Len) # Caractere md5
	tmpMd5 = mod(ord(md5Key[tmp]), keyLen) # Caractere key
	tmpKey = mod(ord(key[tmpMd5]), stringLen) # Caractere string
	crypt = crypt + ' ' + str(ord(string[tmpKey]) + ord(key[tmpMd5]))
	
	#print chr(ord(string[tmpKey])) + ' - ' + chr(ord(key[tmpMd5])) + '(' + str(tmpKey) + ') = ' + str(ord(string[tmpKey]) + ord(key[tmpMd5]))
	
	string = deleteIndex(string, tmpKey)
	stringLen = stringLen - 1
	
print crypt
  • Partager sur Facebook
  • Partager sur Twitter
27 octobre 2021 à 12:29:59 - Message modéré pour le motif suivant : Message complètement hors sujet


27 octobre 2021 à 13:27:02

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter