Page 1 sur 3

Xor

Publié : ven. 07/sept./2012 13:08
par SPH
Plantage de SPH en beauté

Re: Xor

Publié : ven. 07/sept./2012 13:37
par Ar-S
Simplement parce que Asc("z") = 122

donc to soft au z de azerty fait

Code : Tout sélectionner

Debug Str(122 ! 122)

Re: Xor

Publié : ven. 07/sept./2012 13:43
par Golfy

Code : Tout sélectionner

message$="azerty"

Procedure.s Xorize(message$,b)
For u=1 To Len(message$)
  c=Asc(Mid(message$,u,1))
  c=c ! b
  b$+Chr(c)
  Debug Str(c)
Next
ProcedureReturn "["+b$+"]"
EndProcedure
Debug xorize(message$,65)
Debug xorize(message$,122)
Je ne vois pas où tu trouve un problème, hormis que dans le deuxième cas, il n'y a que des caractères non-imprimables (ASC < 32), dont un NULL.
32
59
36
51
53
56
[ ;$358]
27
0
31
8
14
3
[]

Re: Xor

Publié : ven. 07/sept./2012 13:49
par SPH
Je me suis sans doute mal exprimé, fatigué que je suis d'avoir codé depuis 4h du mat.

ce code donne un espace (plus precisement un chr(0) :

Code : Tout sélectionner

message$="a"
b$=""

For u=1 To Len(message$)
  c=Asc(Mid(message$,u,1))
  b=65 ; on xorise le a
  c=c ! b
  b$+Chr(c)
Next
                
Debug b$
Tandis que ce code ne donne pas le chr(0) attendu apres le premier caractere :

Code : Tout sélectionner

message$="az"
b$=""

For u=1 To Len(message$)
  c=Asc(Mid(message$,u,1))
  b=122 ; on xorise le z
  c=c ! b
  b$+Chr(c)
Next
                
Debug b$

Re: Xor

Publié : ven. 07/sept./2012 14:12
par Ar-S
Tu demandes un Chr(32) pas un chr(0)
je ne vois pas ou tu vois un chr(0) ?

Code : Tout sélectionner

c=Asc("a")
Debug "c = " +Str(c)
  
b=65 
c = c ! b
b$ = Chr(c)
Debug "(c ! b) = "+ Str(c)               
Debug "chr("+Str(c)+") donne : b$ = "+ Chr(c)

Re: Xor

Publié : ven. 07/sept./2012 14:13
par SPH
Ar-S a écrit :Tu demandes un Chr(32) pas un chr(0)
je ne vois pas ou tu vois un chr(0) ?

Code : Tout sélectionner

c=Asc("a")
Debug "c = " +Str(c)
  
b=65 
c = c ! b
b$ = Chr(c)
Debug "(c ! b) = "+ Str(c)               
Debug "chr("+Str(c)+") donne : b$ = "+ Chr(c)
un chr(0) car 65!65 = 0

Re: Xor

Publié : ven. 07/sept./2012 14:17
par Golfy
Eh bien écrit ton message en majuscule !
Z = 90
z = 122

voilà la différence :)

Re: Xor

Publié : ven. 07/sept./2012 14:24
par Ar-S
SPH a écrit :
Ar-S a écrit :Tu demandes un Chr(32) pas un chr(0)
je ne vois pas ou tu vois un chr(0) ?

Code : Tout sélectionner

c=Asc("a")
Debug "c = " +Str(c)
  
b=65 
c = c ! b
b$ = Chr(c)
Debug "(c ! b) = "+ Str(c)               
Debug "chr("+Str(c)+") donne : b$ = "+ Chr(c)
un chr(0) car 65!65 = 0
Tu as essaye le code ?
c fait 95 pas 65

Re: Xor

Publié : ven. 07/sept./2012 14:28
par SPH
Ar-S a écrit :
SPH a écrit :
Ar-S a écrit :Tu demandes un Chr(32) pas un chr(0)
je ne vois pas ou tu vois un chr(0) ?

Code : Tout sélectionner

c=Asc("a")
Debug "c = " +Str(c)
  
b=65 
c = c ! b
b$ = Chr(c)
Debug "(c ! b) = "+ Str(c)               
Debug "chr("+Str(c)+") donne : b$ = "+ Chr(c)
un chr(0) car 65!65 = 0
Tu as essaye le code ?
c fait 95 pas 65

Code : Tout sélectionner

Debug 65!65
0

Re: Xor

Publié : ven. 07/sept./2012 14:37
par Ar-S
Image

Re: Xor

Publié : ven. 07/sept./2012 14:42
par SPH
..........

Re: Xor

Publié : ven. 07/sept./2012 14:49
par Golfy
Golfy a écrit :Eh bien écrit ton message en majuscule !
Z = 90
z = 122

voilà la différence :)
Je ne dois pas écrire assez gros (pour une fois que j'arrive à trouver le problème)...
message$="az"
Les lettres du message sont en minuscules : pour xoriser le 'a' minuscule, la valeur ASCII est 97 (et non 65)
donc
Debug 65!65 = 0 MAIS Debug 97|65 = 32 (un espace en ASCII)


SPH, as-tu compris ? dans l'IDE de PureBasic, faire [Alt+A] pour avoir la table ASCII... 8)

Re: Xor

Publié : ven. 07/sept./2012 14:51
par SPH
Golfy a écrit :
Golfy a écrit :Eh bien écrit ton message en majuscule !
Z = 90
z = 122

voilà la différence :)
Je ne dois pas écrire assez gros (pour une fois que j'arrive à trouver le problème)...
message$="az"
Les lettres du message sont en minuscules : pour xoriser le 'a' minuscule, la valeur ASCII est 97 (et non 65)
donc
Debug 65!65 = 0 MAIS Debug 97|65 = 32 (un espace en ASCII)


SPH, as-tu compris ?
Oui mais je n'ai pas le choix. Le probleme, je le rencontre tot ou tard. Car j'xorise autant les minuscules que les majuscules...

Re: Xor

Publié : ven. 07/sept./2012 15:09
par Golfy
Bon, déjà une chose est sure : Purebasic ne buggue pas !
Par contre ta fonction doit être modifiée en fonction de ton besoin : si tu dois écrire le message en ASCII, tu dois éviter les résultats XOR plus petit que 32...

Voici un exemple de code (qui ne correspond probablement pas à ton besoin) pour te donner des idées.
Tu peux aussi ajouter des tests dans la procédure, mettre les LCASE ou UCASE dans celle-ci de manière conditionnelle (si b < 91 ALORS UCASE(message$) else LCASE(message$))

Si tu veux un code plus juste, il faut nous expliquer ce que tu attends exactement :)

Code : Tout sélectionner

message$="azerty"

Procedure.s Xorize(message$,b)
For u=1 To Len(message$)
  c=Asc(Mid(message$,u,1))
  c=c ! b
  b$+Chr(c)
  Debug Str(c)
Next
ProcedureReturn "["+b$+"]"
EndProcedure

; xorization des minuscules (a=97 à z=122)
For t=97 To 122
	Debug xorize(LCase(message$),t)
Next t

; xorization des majuscules (A=65 à Z=90)
For t=65 To 90
	Debug xorize(UCase(message$),t)
Next t
PS : regardes dans le message http://www.purebasic.fr/french/viewtopi ... 60#p146760 : la trace du debug caractère par caractère montre que ton xor "az" avec 65 renvoie le caractère 32 (ESPACE) et non CHR(0)

Re: Xor

Publié : ven. 07/sept./2012 15:16
par SPH
Merci golfy. Il n'y a probablement pas de bug dans PB mais n'empeche, le chr(0) apparait dans un cas sur 2 (voir mon premier post) :|