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

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
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.

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:

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

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.