Page 1 sur 2

A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : ven. 17/févr./2017 4:28
par YvesRossignol
Bonjour, je veux en fait prendre un mot entré par un utilisateur et le transformer pour l'utiliser comme vecteur d'initialisation dans un programme d'encryption...

Si je me souviens bien c'est Zorro qui avait fourni le code, sinon je m'excuse de mon erreur. Ce code m'a été très utile

Code : Tout sélectionner

  
 DataSection
      key:
      Data.b $8A,$15,$51,$2C,$0C,$8A,$0A,$D8,$07,$E4,$21,$A2,$8E,$83,$A3,$88,$8A,$CA,$FB,$E1
      Data.b $7C,$A3,$6B,$D6,$BC,$F7,$E6,$CD,$FE,$B5,$D7,$B3
      iVector:
      Data.b $07,$0C,$96,$48,$33,$51,$35,$80,$0C,$A9,$42,$1E,$11,$E0,$83,$C7,$C4,$C6,$E1,$E4
      Data.b $2C,$40,$81,$0A,$24,$70,$00,$10,$08,$B3,$64,$21
EndDataSection
  
si mon utilisateur entre : voicimonmotdepasse dans une variable keycode.s et que je veux le transformer pour obtenir un vecteur d'initialisation, comment devrais-je procéder?

Merci de votre aide. J'avoue franchement ne pas comprendre $8A et le reste.... je sais que 8A est une représentation hex... mais le $...

Yves 8O

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : ven. 17/févr./2017 5:02
par Ar-S
ça signifie à PB que c'est de l'hexa justement.
Comme lorsque tu entres une couleur de la sorte :
Rouge = $0000FF plutôt que RGB (255,0,0)

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : ven. 17/févr./2017 7:36
par Micoute
Et % c'est du binaire.

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : ven. 17/févr./2017 11:38
par microdevweb
C'est de l'hexadécimal

Petite explication:

Alors que nous travaillons en décimal avec une base de 10 et pouvons utiliser des valeurs de 0 à 9. L'ordinateur ne connait que deux valeur 0 et 1 et utilise une forme binaire en base de 2.

Exemple:
255 dans notre système décimal cela donne

Code : Tout sélectionner

Define maVariable.a=255
; (5x 10^0)+(5 x 10^1)+(2 x 10^2)=255
L'ordinateur va codé cela sur 8 bits (dans ce cas 32 bits si par exemple c'est un long) qui pourront prendre les valeur suivantes .

Code : Tout sélectionner

Define maVariable.a=255 ; ASCI 8 bits non signé
; dans notre systeme décimal cela donne
; (5x 10^0)+(5 x 10^1)+(2 x 10^2)
; L'ordinateur va codé cela sur 8 bits qui pouront prendre les valeur suivantes 
; (2^7) + (2^6) +(2^5) + (2^4) + (2^3) + + (2^2) + (2^1) + (2^0)
; soit
; 128   +  64   + 32   +  16   +    8   +    4    +   2  +   1
Dans le cas de la valeur donnée tous les bits seront à 1 et donc si on additionne toutes les valeurs on obtient bien 255. Si par exemple j'avais donné la valeur 128 seul le bit de poids fort (à gauche) serait à 1. Teste le code si dessous pour le vérifier :wink:

Code : Tout sélectionner

Define maVariable.a=255 ; ASCI 8 bits non signé
Debug "Exemple pour la valeur 255 "+RSet(Bin(maVariable),8,"0")
maVariable=128
Debug "Exemple pour la valeur 128 "+RSet(Bin(maVariable),8,"0")
Pour ce qui concerne l'hexadécimal, une valeur code 4 bits de 0 à 15

Code : Tout sélectionner

maVariable=$01 ; donne 1 en binare 0000 0001
Debug maVariable
maVariable=$02 ; donne 2 en binare 0000 0010
Debug maVariable
maVariable=$03 ; donne 3 en binare 0000 0011
Debug maVariable
maVariable=$04 ; donne 4 en binare 0000 0100
Debug maVariable
maVariable=$05 ; donne 5 en binare 0000 0101
Debug maVariable
maVariable=$06 ; donne 6 en binare 0000 0110
Debug maVariable
maVariable=$07 ; donne 7 en binare 0000 0111
Debug maVariable
maVariable=$08 ; donne 8 en binare 0000 1000
Debug maVariable
maVariable=$09 ; donne 9 en binare 0000 1001
Debug maVariable
maVariable=$0A ; donne 10 en binare 0000 1010
Debug maVariable
maVariable=$0B ; donne 11 en binare 0000 1011
Debug maVariable
maVariable=$0C ; donne 12 en binare 0000 1100
Debug maVariable
maVariable=$0D ; donne 13 en binare 0000 1101
Debug maVariable
maVariable=$0E ; donne 14 en binare 0000 1110
Debug maVariable
maVariable=$0F ; donne 15 en binare 0000 1111
Debug maVariable
Chaque fois que l'on décale à gauche on décale de 4 bits

Autrement dit:

$FF =(128+64+32+16+8+4+2+1) = 255
$0F =(8+4+2+1) = 15
$F0 =(128+64+32+16) = 240

Voila j'espère avoir peu t'aidé

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : ven. 17/févr./2017 12:03
par Zorro
le "$" c'est une convention d'ecriture pour dire qu'on donne un chiffre en hexadecimal

plutot que d'ecrire
255

on ecrit
$FF , le "$" est la pour indiquer au compilateur qu'on donne un chiffre en hexa

si j'avais voulu transmetre au compilo le meme chiffre en binaire j'aurai utilisé le signe "%"
%11111111

:)

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : ven. 17/févr./2017 12:59
par Marc56
Comme par défaut tout est en décimal, il faut que le système sache différencier un nombre en hexa, car celui-ci ne contient pas forcément de lettres qui permettrait de le différentier automatiquement.

Ex: 20 en décimal s'écrit 14 en hexa, donc il faut un moyen d'indiquer la base utilisée.

Code : Tout sélectionner

For i = 1 To 20
     Debug "" + i  + " " + Hex(i)
Next
:wink:

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : ven. 17/févr./2017 22:04
par YvesRossignol
ok, merci

si je comprends bien... je prend mon mot de passe de mon utilisateur "voicimonmotdepasse" et que je transforme en code ASCII v par exemple est 118 en ascii et 76 en hexa... est-ce que je peut directement utiliser 76 pour construire un vecteur d'initialisation ? ou je dois prendre $76 et comment faire pour mettre plusieurs valeurs de suite comme dans mon exemple...

en vieux GWbasic quand on utilisait Data 3, 5, 6 c'était pour entrer des valeur dans un "read a,b,c" a aurait été 3, b aurait été 5 etc.

je vais faire des tests et si vous avez des idées merci à l'avance.

Yves

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : ven. 17/févr./2017 23:00
par Zorro
YvesRossignol a écrit :
en vieux GWbasic quand on utilisait Data 3, 5, 6 c'était pour entrer des valeur dans un "read a,b,c" a aurait été 3, b aurait été 5 etc.
en Purebasic, on ne peut pas faire Read a,b,c

mais on peut faire

Code : Tout sélectionner


restore debut:
while a.l<>-1
		read a.l
		debug chr(a.l)
		If a.l<>-1
				sortie$=sortie$+chr(a.l)
		Endif
wend
debug Sortie$

datasection
		debut:
		data.l $70,$61,$73,$73,$77,$6F,$72,$64
		data.l -1
EndDataSection
ou comme ça de façon plus bourrin

Code : Tout sélectionner


restore debut:

read a.l		
read b.l	
read c.l
read d.l
read e.l
read f.l
read g.l
read h.l
sortie$=sortie$+chr(a.l)+chr(b.l)+chr(c.l)+chr(d.l)+chr(e.l)+chr(f.l)+chr(g.l)+chr(h.l)


debug Sortie$

datasection
		debut:
		data.l $70,$61,$73,$73,$77,$6F,$72,$64
		data.l -1
EndDataSection

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : sam. 18/févr./2017 8:06
par Marc56
YvesRossignol a écrit :... je transforme en code ASCII v par exemple est 118 en ascii et 76 en hexa... est-ce que je peux directement utiliser 76 pour construire un vecteur d'initialisation ? ou je dois prendre $76 ...
Si tu entres un nombre seul (= uniquement composé de chiffres), toute fonction PB considère que c'est du décimal, si tu veux entrer de l'hexa il faut préfixer avec $
Donc tu mets: 118 ou $76 (Oui, tu peux mélanger les différentes bases dans une même expression ou suite de données)

Exemple:

Code : Tout sélectionner

Debug 118 * 2
Debug $76 * 2

; = 236 dans les deux cas
:wink:

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : sam. 18/févr./2017 9:29
par Zorro
si tu prends 76 , par defaut, Purebasic considere qu'il s'agit de la valeur 76 (en decimal )
alors que $76 , Purebasic considere qu'il s'agit de la valeur 76 (en hexadecimal) c'est a dire 118 decimal ...
ou %1110110 en binaire (note le "%" a la place de "$")

tain, c'est pourtant pas compliquer a comprendre 8O

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : sam. 18/févr./2017 11:40
par Ar-S
Petite proce pour te créer ta datasection au besoin :

Code : Tout sélectionner


Procedure.s GenereDatasec(MOT.s)
  ;Ar-S
  Protected DataSec.s = "Data.l " 
  
  For i = 1 To Len(MOT)
    l.s = Hex(  Asc(  Mid(  MOT,i,1  )  )  )
    DataSec + "$"+l.s+","
  Next
  ProcedureReturn Left(DataSec,Len(DataSec)-1)
EndProcedure

Debug GenereDatasec("voicimonmotdepasse")

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : sam. 18/févr./2017 11:47
par microdevweb
Bien que je ne comprenne pas bien ta question fais attention

76 et $76 ne donne absolument pas les même valeur

Code : Tout sélectionner

;  76 sur 1 octet 0100 1100 (64+8+4) = 76
;$76 sur 1 octet 0111 0110 (64+32+16+4+2)=118

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : sam. 18/févr./2017 18:25
par YvesRossignol
Pour Ar-S

j'utilise un vecteur de type byte... data.b
comment convertir une variable DataSec.s en Data.b et le mettre dans initializationVector
j'utilise la commande alors:

bon, je sais que mon code n'est pas très propre mais je fais des tests... je ne veux pas avoir toujours le même vecteur d'initilisation... est-ce réaliste????

Code : Tout sélectionner

           ; Crypter une chaîne de caractères
  
              String$ = keyword
  
                 StringMemorySize = StringByteLength(String$) + SizeOf(Character) ; Espace pour la chaîne et son caractère 'nul' de terminaison de chaîne
                *CipheredString = AllocateMemory(StringMemorySize)   
                *DecipheredString = AllocateMemory(StringMemorySize) 
                
                If AESEncoder(@String$, *CipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
                  keycodedata.s=PeekS(*CipheredString)
                  Debug "Codé : "+PeekS(*CipheredString) ; Attention, ça s'arrêtera sur le premier octet nul, uniquement à des fins de démonstration
                  
                  
                  AESDecoder(*CipheredString, *DecipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
                  Debug "Décodé : "+PeekS(*DecipheredString)
               EndIf
              
           
           keycodedata.s = GenereDatasec(keyword)
           Debug keycodedata

Code : Tout sélectionner

Procedure.s GenereDatasec(MOT.s)
  ;Ar-S
 ; Protected DataSec.s = "Data.l " 
   Protected DataSec.s = ""
  For i = 1 To Len(MOT)
    l.s = Hex(  Asc(  Mid(  MOT,i,1  )  ) )
    DataSec + "$"+l.s+", "
  Next
  Debug l.s
  Debug DataSec
  ;
  ;
  ; il faut transformer DataSec qui est un string pour obtenir un InitializationVector qui est un byte
  ; si je veux suivre la logique du code source que j'utilise... je veux en fait changer ce InitializationVecteur
  ; a chaque fois que j'utilise le programme car il doit avoir une clé de codage unique par fichier envoyé.
  ;
  ; merci de votre aide
  ;
  
;       InitializationVector:
  ;        Data.b $3d, $af, $ba, $42, $9d, $9e, $b4, $30, $b4, $22, $da, $80, $2c, $9f, $ac, $41
  
  
  ProcedureReturn Left(DataSec,Len(DataSec)-1)
EndProcedure
merci infiniment
c'est très intéressant car j'apprend beaucoup j'ai lu tout l'avant-midi... (il est 12:30 au Québec, je suis sur mon ordi depuis 7:15 et je cherche mais sans succès)

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : sam. 18/févr./2017 18:40
par YvesRossignol
L'idée de base est de faire une application qui encode et décode en fonction de clé et vecteur propre à chaque client. On envoi au bureau beaucoup de pdf, de fichiers excel, des dessins, etc dans des fichiers zip. Les clients sont supposés les regarder et voir si il n'y a pas d'erreur... c'est dans nos contrats. Le problème c'est que les clients ne regardent jamais et construisent sans se poser de question. Je veux les forcer à accepter les conditions du contrat en cryptant le fichier zip (oui il y a des consonances légales, je ne ferai pas comme Apple...). Mon client devra accepter les conditions, je m'envoi un courriel de confirmation et je lui renvoi la clé de décodage. Sauf que je veux avoir des clés pour chaque contrat et chaque envoi... on envoi plusieurs gigs par semaine à plusieurs clients. Ca ne peut pas être les mêmes clés.

J'espère que c'est plus clair... mais je ne suis pas certain.

en ligne à ligne

- envoi initial "donnees.zip" encrypter.
- le client démarre mon application (fourni auparavant)
- il entre sa clé d'acceptation
- l'application m'envoi un courriel (ou l'application décrypte le fichier) mais moi ça me prends une preuve de son acceptation car les poursuites civiles arrivent très vite dans mon domaine. La dernière à coûter 200000$
- j'envoi la clé de décodage en ayant la preuve en main que le client à accepter les conditions... (j'apporterais cela en justice au besoin)
- le client peut lire tous mes fichiers pour cette fois...
- au prochain envoi la clé d'acceptation sera probablement la même pour le même client et le même utilisateur
- mais la clé de décodage sera unique à chaque fois.

Au bureau, on est franchement écoeuré de certains clients qui nous gonflent des factures inutilement.

Merci

Re: A quoi sert le $ dans " Data.b $8A,$15,$51"

Publié : dim. 19/févr./2017 11:01
par microdevweb
Une solution éventuel

Un exe qui avec includebinary ne donne le fichier que suivant les conditions requises

Un exe qui charge le fichier depuis un serveur ftp (attention de crypter) l'adresse ftp login et mot de passe qui autrement seront visibles dans l'exe.