Crypter un texte

Programmation d'applications complexes
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Crypter un texte

Message par Kwai chang caine »

c'est pourquoi ton idée de poluer la phrase codé est bonne
C'est vrai que dans un soucis de faire toujours les cryptages les plus courts, on a tendance a pas penser à ça...
Si c'est pas foireux comme idée ça :mrgreen: cool !!! 8)

Moi j'ai une question, puisque vous parler cryptage et que vous avez l'air de vous y connaitre drôlement.
J'entend souvent parler de cryptage a 64 bits, 128 bits etc...de XOR et plein d'autres choses...

Comme j'y connais rien à tout ça, quand j'ai eu besoin de crypter une clef, je me suis créé toute une serie de fonctions
ReverseString
CaractereEnAscii
ComplementeASCII (100-ASCII)
Etc ...
Et je les mixes ensemble afin d'obtenir une clef :roll:

Ma méthode n'est elle pas plus sure qu'un codage que tout le monde connait comme le XOR apparemment ou tout autre méthode que je ne connait pas comme cette histoire de 64 bits, 128 Bits etc...
Sans parler de cette histoire que DOBRO parle avec des giciels qui lisent dans les EXE, c'est sur que comme il dit si y'a le decrypteur intégré dans l'exe...ce doit pas être trop dur pour un CAID de remonter le courant comme les saumons :roll:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Crypter un texte

Message par Backup »

Je ne suis pas un spécialiste de la crypto , mais je pense que non , ta méthode n'as rien de mieux que le Xor

il faut savoir qu'un Xor peut etre tres tres efficace , si la clef qui sert a crypter la donnée est aussi grande que la donnée elle meme

cependant, il reste des prg d'analyse qui regarde le pourcentage de lettre présentes dans la langue française

voir des séquence de lettres comme "en" , "et" ,"ent" ect ...
en fonction de ces pourcentage , on sait qu'il y a plus de chance de rencontrer tel lettre dans un texte e, français, qu'en Anglais
, il n'y a qu'a observer un clavier d'ordi usé, pour se rendre compte visuellement de ça

fonction de ce savoir, on peut faire une recherche sur ces lettres et sequence de lettre , et déterminé certaines répétition
qui peuvent aider a retrouver la clef de codage ...

le nombre de bits c'est la taille de la clef de codage , (qui est réglementé en France) :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Crypter un texte

Message par Kwai chang caine »

le nombre de bits c'est la taille de la clef de codage , (qui est réglementé en France)
Merci de ton explication DOBRO 8)
Donc 128 bits ce serait une clef de 128 caracteres ???
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Crypter un texte

Message par SPH »

Kwai chang caine a écrit :
le nombre de bits c'est la taille de la clef de codage , (qui est réglementé en France)
Merci de ton explication DOBRO 8)
Donc 128 bits ce serait une clef de 128 caracteres ???
Non, 128 bits, c'est 128/8 caracteres; soit 16 caracteres

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Crypter un texte

Message par SPH »

Un xor avec une clé qui se repere est largement cassable. Je l'ai montré a plusieurs reprises dans nos test de crypto que l'on a fait il y a 1 an.

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Crypter un texte

Message par Le Soldat Inconnu »

Moi, j'ai juste utilisé une clé XOR puis j'ai mélangé les caractères (tout simplement, j'ai pris le premier caractère puis le dernier, puis le second, puis l'avant-dernier, etc...)

Le cryptage en unicode est plus complexe car je combine les valeurs 0 des caractère simple (en unicode, un caractère est sur 2 octets, mais une caractère "classique" comme "a", "b", ... est composé de "a" suivant d'un "0", donc j'ai combiné pour gagner en longueur sur le texte crypté.

Voici mon code, et bravo à Dobro :)

Code : Tout sélectionner

Texte.s = "Bonjour les amis," + #crlf$ + "je vous adore !"


Procedure.s CrypText(Texte.s, Cle.l = 174)
	Protected Cryptage.s
	Protected Table.s
	Table = "0123456789ABCDEF"
	Table + "GHWJKLMNXPQRSTUV"
	Protected NewList Valeur.l()
	Protected NewList ValeurCryptee.s()
	; Mise en forme des sauts de ligne
	Texte = ReplaceString(Texte, #crlf$, Chr(10))
	Texte = ReplaceString(Texte, Chr(13), Chr(10))
	
	Texte_Longueur = StringByteLength(Texte)
	For Index = 0 To Texte_Longueur - 1
		AddElement(Valeur())
		Valeur() = PeekB(@Texte + Index) & $FF
	Next
	
	ForEach Valeur()
		; Valeur suivante
		CompilerIf #PB_Compiler_Unicode
			If NextElement(Valeur())
				Valeur_Suivante = Valeur()
				PreviousElement(Valeur())
			Else
				Valeur_Suivante = -1
			EndIf
		CompilerEndIf
		; Cryptage
		AddElement(ValeurCryptee())
		CompilerIf #PB_Compiler_Unicode
			If Valeur() = 10 And Valeur_Suivante = 0 ; Saut de ligne
				ValeurCryptee() = #crlf$
				NextElement(Valeur())
			Else
				ValeurCryptee() = Hex(Valeur() ! Cle)
				If Valeur_Suivante = 0
					ValeurCryptee() = Mid(Table, FindString(Table, Left(ValeurCryptee(), 1)) + 16, 1) + Right(ValeurCryptee(), 1)
					NextElement(Valeur())
				EndIf
			EndIf
		CompilerElse
			If Valeur() = 10 ; Saut de ligne
				ValeurCryptee() = #crlf$
			Else
				ValeurCryptee() = Hex(Valeur() ! Cle)
			EndIf
		CompilerEndIf
		
	Next
	
	Debut = 1
	While ListSize(ValeurCryptee())
		If Debut
			FirstElement(ValeurCryptee())
		Else
			LastElement(ValeurCryptee())
		EndIf
		Cryptage + ValeurCryptee()
		DeleteElement(ValeurCryptee())
		Debut = 1 - Debut
	Wend
	
	ProcedureReturn Cryptage
EndProcedure
Procedure.s DecrypText(Texte.s, Cle.l = 174)
	Protected Table.s
	Table = "0123456789ABCDEF"
	Table + "GHWJKLMNXPQRSTUV"
	Protected NewList Valeur.l()
	Protected NewList ValeurCryptee.s()
	Protected Decryptage.s
	; Mise en forme des sauts de ligne
	Texte = ReplaceString(Texte, #crlf$, Chr(10))
	Texte = ReplaceString(Texte, Chr(13), Chr(10))
	Texte = ReplaceString(Texte, Chr(10), #crlf$)
	
	
	Texte_Longueur = Len(Texte)
	For Index = 1 To Texte_Longueur Step 2
		Debut = Int((ListSize(ValeurCryptee()) + 1) / 2) - 1
		If Debut >= 0
			SelectElement(ValeurCryptee(), Debut)
		EndIf
		AddElement(ValeurCryptee())
		ValeurCryptee() = Mid(Texte, Index, 2)
	Next
	
	ForEach ValeurCryptee()
		If ValeurCryptee() = #crlf$
			AddElement(Valeur())
			Valeur() = 10
			CompilerIf #PB_Compiler_Unicode
				AddElement(Valeur())
				Valeur() = 0
			CompilerEndIf
		Else
			CompilerIf #PB_Compiler_Unicode
				Valeur_Suivante = -1
				Debut = FindString(Table, Left(ValeurCryptee(), 1))
				If Debut > 16
					ValeurCryptee() = Mid(Table, FindString(Table, Left(ValeurCryptee(), 1)) - 16, 1) + Right(ValeurCryptee(), 1)
					Valeur_Suivante = 0
				EndIf
			CompilerEndIf
			AddElement(Valeur())
			Valeur() = Val("$" + ValeurCryptee()) ! Cle
			CompilerIf #PB_Compiler_Unicode
				If Valeur_Suivante >= 0
					AddElement(Valeur())
					Valeur() = 0
				EndIf
			CompilerEndIf
		EndIf
	Next
	
	CompilerIf #PB_Compiler_Unicode
		Decryptage = Space(ListSize(Valeur()) / 2)
	CompilerElse
		Decryptage = Space(ListSize(Valeur()))
	CompilerEndIf
	ForEach Valeur()
		PokeB(@Decryptage + ListIndex(Valeur()), Valeur())
	Next
	Decryptage = ReplaceString(Decryptage, Chr(10), #crlf$)
	
	ProcedureReturn Decryptage
EndProcedure

Debug Texte
Texte = CrypText(Texte)
Debug Texte
If CreateFile(0, "Temp.txt")
	WriteString(0, Texte)
	CloseFile(0)
	RunProgram("Temp.txt")
	Delay(1000)
	DeleteFile("Temp.txt")
EndIf

Texte = DecrypText(Texte)
Debug Texte
If CreateFile(0, "Temp2.txt")
	WriteString(0, Texte)
	CloseFile(0)
	RunProgram("Temp2.txt")
	Delay(1000)
	DeleteFile("Temp2.txt")
EndIf

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Crypter un texte

Message par Kwai chang caine »

Merci SOLDAT du partage 8)

C'est vrai...pour un musicien, il est drolement fort ce DOBRO :mrgreen: , il m'epate de temps en temps 8O

@SPH
Merci beaucoup de ta reponse 8)

Edit :
Je viens de lancer ton super code..
Moi aussi j't'adore, ainsi que tous les copains....et j'ai pas besoin de Crypteur/Decrypteur pour te le dire :D
Remarque ça tombe bien..j'aurais pas su le faire :lol:
Encore merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Crypter un texte

Message par Backup »

:)
j'ai continué a chercher un peu ..

voici le prg pour décoder le mode "unicode" pré_crypté :)

a lancer en mode normal (non unicode)

et puisqu'on sait que la phrase commence par "B" , on fait rechercher directement la clef par le prg :)

ps [reedit]
ce code décode les 2 type de phrases et trouve la clef (du moment que la phrase commence par Bonjour ;) )

Code : Tout sélectionner

; ************** decommenter la phrase a décoder ******************************************
;code$="EC8FC18EC0CBC4DCC1C1DBCADCCF8E8EC2DDCBDBDDC18ED8CF8EC3CBC7C4DD82"
code$="UCXFS1XES0SBS4TCS1S1TBSATCSFXEXES2TDSBTBTDS1XET8SFXES3SBS7S4TDX2"
; ***************************************************************************************

table$="GHWJKLMNXPQRSTUV"
; decode la phrase pré_crypté , avec les valeur Hexa Farfelues (mais bien trouvé )
for i=1 to len(table$)
	car$=mid(table$,i,1)
	code$=ReplaceString(code$,car$, hex(i-1) )
next i
; ******** retrouve la clef tout seul :o) ************
clef= val( "$"+mid(code$,1,2))  ! asc("B") ; on sait que ça commence par Bonjour ;o)

; ***********************************************

; *********** mise en tableau ************
dim tabl.s(0)
for i=1 to len(code$) step 2	
	tabl.s(b)="$"+mid(code$ ,i,2)
	b=b+1
	redim tabl.s(b)
	i=i+2
next i
; ***************************************


;for clef=1 to 255  ; a activer pour rechercher la clef si on ne la connais pas 
for i=1 to   ArraySize(tabl.s())
	sortie$=sortie$+chr( val(tabl.s(i-1)) ! clef)
next i
debug sortie$ + " clef :"+str(clef)
sortie$=""
debug ""
;next clef
calldebugger


;
; EPb


Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Crypter un texte

Message par Le Soldat Inconnu »

Le seul HIC, c'est que tu ne décodes que la moitié de la phrase, vu que tu lis un caractère sur 2. le restant de la phrase est dans les autres caractères :)

Regarde bien :)

Code : Tout sélectionner

; ************** decommenter la phrase a décoder ******************************************
;code$="EC8FC18EC0CBC4DCC1C1DBCADCCF8E8EC2DDCBDBDDC18ED8CF8EC3CBC7C4DD82"
code$="UCXFS1XES0SBS4TCS1S1TBSATCSFXEXES2TDSBTBTDS1XET8SFXES3SBS7S4TDX2"
; ***************************************************************************************

table$="GHWJKLMNXPQRSTUV"
; decode la phrase pré_crypté , avec les valeur Hexa Farfelues (mais bien trouvé )
For i=1 To Len(table$)
		car$=Mid(table$,i,1)
		code$=ReplaceString(code$,car$, Hex(i-1) )
Next i
; ******** retrouve la clef tout seul :o) ************
clef= Val( "$"+Mid(code$,1,2))  ! Asc("B") ; on sait que ça commence par Bonjour ;o)

; ***********************************************

; *********** mise en tableau ************
Dim tabl.s(0)
For i=1 To Len(code$) Step 4
		tabl.s(b)="$"+Mid(code$ ,i,2)
		b=b+1
		Redim tabl.s(b)
	Next i
	For i=Len(code$) - 1 To 1 Step -4
		tabl.s(b)="$"+Mid(code$ ,i,2)
		b=b+1
		Redim tabl.s(b)
	Next i
; ***************************************


;for clef=1 to 255  ; a activer pour rechercher la clef si on ne la connais pas 
For i=1 To   ArraySize(tabl.s())
		sortie$=sortie$+Chr( Val(tabl.s(i-1)) ! clef)
Next i
Debug sortie$ + " clef :"+Str(clef)
sortie$=""
Debug ""
;next clef
CallDebugger


;
; EPb
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Crypter un texte

Message par Cool Dji »

Bravo Dobro !
Only PureBasic makes it possible
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Crypter un texte

Message par Backup »

Le Soldat Inconnu a écrit :Le seul HIC, c'est que tu ne décodes que la moitié de la phrase, vu que tu lis un caractère sur 2. le restant de la phrase est dans les autres caractères :)

Regarde bien :)
ha oui ! exacte :) arf! j’étais pas loin :)
Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

Re: Crypter un texte

Message par nemerod256 »

moi j'ai qu'elle que chose 8)
un "Challenge Décrypto"
voila le message:
37 A7 9C 9E 34 70 3D 81 81 8F 66 70 3F CE D2 D8 76 29 62 9D 9B 96 35 6D 2C 9F CF D1 32 3C F5 17 8B 48 F7 61 60 8C 96 9D 33 EA
petit indice :)
tous l’algorithme et en ASCII
trouvé ma méthode (pour les plus courageux (humour))

tous a été faire avec PB
la clef et non random(xxx)
mais il y a 1 clef
pas la pure aléatoire
mais le message

en 32 ligne de code
attention au plantage neuronale
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
Répondre