IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Problème de conversion Stream vers PByte


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut Problème de conversion Stream vers PByte
    Hello !!

    J'ai une api windows qui semble prendre comme parametre un PByte ou un PChar (apres tout je ne pense pas que cela soit vraiement different).

    Cette api a pour but de decrypter un fichier dont le contenu se situe dans cette variable.

    Mon but a moi est de convertir le contenu d'un TStream (TMemoryStream Exactement) dans cette variable PByte ou PChar pour la transmetre a l'api.

    Je tourne en rond ....

    Pour info, la taille du fichier est de 6224 octets. Je pensais tout gerer en un block .... a moins que cela ne soit pas possible ...
    J'ai des soucis lors de l'appel a la methode Read ou ReadBuffer du Stream.
    Si je descent en dessous (1024) ca passe ... mais je souhaiterais eviter pour des raison de simplification du code. Si je peux tout gerer en un block ca serait bien.

    Merci d'avance

    [Edit] Au passage j'aimerais m'assurer de la traduction en DElphi de BYTE* pData

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    tu dois pouvoir utiliser MyMemoryStream.Memory qui est un pointeur sur la zone mémoire du stream

    je ne pense pas que le PByte (traduction correcte, pour moi) attendu puisse être remplacé par un PChar, qui attend forcément un #0 terminal

    il ne faudrait bien sûr pas que ton API cherche à modifier la taille du PByte : ça entraînerait sûrement une belle EAV !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    C'ets l'api CryptDecrypt de advapi32.dll

    Elle est declarée comme BYTE* pData et visiblement modifie le contenu de pData puisque elle decrypte le block de pData selon dwDataLen et renvoie un nouveau pData avec un nouveau dwDataLen contenant le code decrypté ....

    J'avoue que la je suis un peu perdu
    J'ai essayé pas mal de choses mais je tombe sur une erreur de type "data inccorect" ou "mauvais parametres" ....

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    c'est pas plutot BYTE *pbData
    Par ce que la meme declaration en VB ca donne ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Declare Function CryptEncrypt Lib "advapi32.dll" _
    	(ByVal hKey As Long, ByVal hHash As Long, ByVal Final As Long, _
    	ByVal dwFlags As Long, ByVal pbData As Long, _
    	ByRef pdwDataLen As Long, ByVal dwBufLen As Long) As Long
    Et eux le passe en Long
    Donc a ce que j'en comprend tu met le pointeur de ta chaine dans pbData et sa longeur dans pdwDataLen
    A++

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    ByVal pbData As Long
    Mon code proviens aussi d'un code VB qui marche et que je cherche a traduire en Delphi.

    Voici la declaration que j'ai :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function CryptDecrypt Lib "advapi32.dll" (ByVal hKey As Long, ByVal hHash As Long, ByVal Final As Long, ByVal dwFlags As Long, ByRef pbData As Any, pdwDataLen As Long) As Long
    Sinon voici le code d'appel :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Function Decrypt(ByVal szKey As String, ByRef pData() As Byte, ByRef dwSize As Long) As Long
        Dim lResult As Long
        lResult = UpdateKey(szKey)
        If lResult = 0 Then
            If CBool(CryptDecrypt(m_hKey, 0, 1, 0, pData(0), dwSize)) = True Then
                ReDim Preserve pData(dwSize)
                Decrypt = 0
                Exit Function
            End If
        Else
            Decrypt = lResult
            Exit Function
        End If
        Decrypt = Err.LastDllError
    End Function
    et le code d'appel de cette fonction (chargemetn du fichier)
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub Decrypt_Click()
        Dim data() As Byte
        Dim lFileLength As Long
        Dim File As Integer
        Dim b As CProtect
        Dim lResult As Long
     
        lFileLength = FileLen(FileName.Text)
        ReDim data(lFileLength)
     
        File = FreeFile
        Open FileName.Text For Binary As #File
        Get #File, 1, data
        Close File
     
        Set b = New CProtect
        lResult = b.Decrypt(PUID.Text, data, lFileLength)
        If lResult = 0 Then
            Text2.Text = data
        Else
            Text2.Text = "Failed to Decode the file." & vbCrLf & "Error: " & lResult
        End If
     
    End Sub
    et pour finir un post ou j'ai posté le code declaratif de l'aide du SDK delphi : ici

    Je sens que je suis pret du but ... et que le probleme viendrais de la transmission de ce code la ....
    Si quelqu'un peut m'y aider ca serait cool

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    si la fonction peut décrypter en produisant un texte plus long que celui crypté, ça devrait poser un pb d'utiliser directement le Stream
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/08/2010, 12h49
  2. Probléme de conversion char vers datetime
    Par locs dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 28/02/2007, 15h29
  3. Problème de conversion TeX vers DVI
    Par Faith's Fall dans le forum Editeurs / Outils
    Réponses: 7
    Dernier message: 20/10/2006, 10h46
  4. Problème de conversion decimal vers Hexa
    Par Elbarto dans le forum C++
    Réponses: 1
    Dernier message: 06/02/2006, 19h37
  5. [MFC] Problème de conversion CString vers Char *
    Par Darkenshin dans le forum MFC
    Réponses: 10
    Dernier message: 02/12/2005, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo