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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

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

Message 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
Yves Rossignol
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message par Micoute »

Et % c'est du binaire.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message 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é
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

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

Message 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

:)
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

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

Message 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
Yves Rossignol
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

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

Message 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
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

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

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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")
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

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

Message 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)
Yves Rossignol
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

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

Message 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
Yves Rossignol
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message 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.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre