Les Snippets

Connexion

Chiffrer et déchiffrer des données pour la session Windows en cours

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 04/01/2007 22:09:28 et initié par ShareVB [Liste]
Vue : 6853
Catégorie(s) : API, Cryptage, Système
Langages dispo pour ce code :
- VB6



Langage : VB6
Date ajout : 04/01/2007
Posté par ShareVB [Liste]
'description d'un objet binaire large
Private Type DATA_BLOB
    cbData As Long
    pbData As Long
End Type
'protège des données pour la session en cours
Private Declare Function CryptProtectData Lib "crypt32.dll" (ByRef pDataIn As DATA_BLOB, ByVal szDataDescr As String, ByVal pOptionalEntropy As Long, ByVal pvReserved As Long, ByVal pPromptStruct As Long, ByVal dwFlags As Long, ByRef pDataOut As DATA_BLOB) As Long
'déprotège des données pour la session en cours
Private Declare Function CryptUnprotectData Lib "crypt32.dll" (ByRef pDataIn As DATA_BLOB, ByVal ppszDataDescr As Long, ByVal pOptionalEntropy As Long, ByRef pvReserved As Any, ByVal pPromptStruct As Long, ByVal dwFlags As Long, ByRef pDataOut As DATA_BLOB) As Long
'copie une zone mémoire dans une autre
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
'libère de la mémoire allouée
Private Declare Function LocalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
'affiche un message d'erreur windows
'===================================
'errCode : code d'erreur
Public Sub ShowErr(ByVal errCode As Long)
On Local Error GoTo Fin
'&H80070000 -> &H8007FFFF : map les codes d'erreus ERROR_XXX de Windows
Err.Raise &H80070000 + errCode
Fin:
    MsgBox Err.Description, vbCritical
End Sub
'chiffre des données pour la session en cours
'============================================
'ptrData : pointeur vers les données à chiffrer
'dwDataSize : taille des données à chiffrer
'ptrEntropy : pointeur vers des données de salissures pour complexifier le déchiffrage hors session
'dwEntropySize : taille des données de salissures
'outBuff : données chiffrées
'renvoie un code d'erreur (ou ERROR_SUCCESS)
Public Function Crypt(ByVal ptrData As Long, ByVal dwDataSize As Long, ByVal ptrEntropy As Long, ByVal dwEntropySize As Long, outBuff() As Byte) As Long
Dim DataIn As DATA_BLOB, DataOut As DATA_BLOB, entropy As DATA_BLOB
Dim pEntr As Long
'remplit les données entrantes
DataIn.cbData = dwDataSize
DataIn.pbData = ptrData
entropy.cbData = dwEntropySize
entropy.pbData = ptrEntropy
If ptrEntropy Then
    pEntr = VarPtr(entropy)
Else
    pEntr = 0
End If
'chiffre les données
If CryptProtectData(DataIn, "", pEntr, 0&, 0&, 0&, DataOut) = 0 Then
    Crypt = Err.LastDllError
Else
    'récupère les données chiffrées
    ReDim outBuff(DataOut.cbData - 1)
    CopyMemory outBuff(0), ByVal DataOut.pbData, DataOut.cbData
    LocalFree DataOut.pbData
    Crypt = 0
End If
End Function

'déchiffre des données pour la session en cours
'============================================
'ptrData : pointeur vers les données à déchiffrer
'dwDataSize : taille des données à déchiffrer
'ptrEntropy : pointeur vers des données de salissures pour complexifier le déchiffrage hors session
'dwEntropySize : taille des données de salissures
'outBuff : données déchiffrées
'renvoie un code d'erreur (ou ERROR_SUCCESS)
Public Function Decrypt(ByVal ptrData As Long, ByVal dwDataSize As Long, ByVal ptrEntropy As Long, ByVal dwEntropySize As Long, outBuff() As Byte) As Long
Dim DataIn As DATA_BLOB, DataOut As DATA_BLOB, entropy As DATA_BLOB
Dim pEntr As Long
'remplit les données entrantes
DataIn.cbData = dwDataSize
DataIn.pbData = ptrData
entropy.cbData = dwEntropySize
entropy.pbData = ptrEntropy
If ptrEntropy Then
    pEntr = VarPtr(entropy)
Else
    pEntr = 0
End If
'déchiffre les données
If CryptUnprotectData(DataIn, 0&, pEntr, 0&, 0&, 0&, DataOut) = 0 Then
    Decrypt = Err.LastDllError
Else
    'récupère les données déchiffrées
    ReDim outBuff(DataOut.cbData - 1)
    CopyMemory outBuff(0), ByVal DataOut.pbData, DataOut.cbData
    LocalFree DataOut.pbData
    Decrypt = 0
End If
End Function

Remarque :
Pour utiliser avec un buffIn() As Byte à crypter sans salt avec sortie dans buffOut() As Byte: Crypt(VarPtr(buffIn(0)),Ubound(buffIn)+1,0&,0&,buffOut)



Codes sources en rapport avec : Chiffrer, Déchiffrer, Crypter, Decrypter, Crypt

{Visual Basic, VB6, VB.NET, VB 2005} CRYPTER/DÉCRYPTER UN TEXTE AVEC UNE CLÉ DE CRYPTAGE DE FAÇON (ASSEZ) SÛRE.
Voici un la source d'un p'tit truc que j'avais fait il y a quelques mois (avec VisualBasic 5): Il s'...

{Visual Basic, VB6, VB.NET, VB 2005} CRYPTAGE ET DÉCRYPAGE D'UNE CHAÎNE DE CARACTÈRES
Bonjour, Je débute en VB.Net et c'est la première source que je dépose sur Vbfrance. J’attends be...

{C / C++ / C++.NET} CRYPTOR
c'est pour crypter tout genre de fichier avec une clé de cryptage de 100 caractéres Max, et il sufit...

{Visual Basic, VB6, VB.NET, VB 2005} DÉCOMPRESSER EN .NET PLUSIEURS FORMATS POPULAIRES D'ARCHIVAGE (RAR, ZIP, CAB, 7Z, GZIP, TAR, ETC...)
Ce code permet de décompresser beaucoup des formats d'archivage RAR, ZIP, CAB, GZIP, BZIP2, TAR, 7z ...

{C / C++ / C++.NET} CRYPTEUR-DÉCRYPTEUR-IP
Logiciel qui pourra vous servir a crypter votre adresse IP et par la suite le décrypter avec l'app...

{Visual Basic, VB6, VB.NET, VB 2005} CRYPTER AVEC LE CHIFFRE DES NIHILISTES RUSSES
ce chiffrement est une variante légerement compliqué d'un carré de Polybe -on cree une premiere cl...

{Visual Basic, VB6, VB.NET, VB 2005} CHIFFRAGE ET DECHIFFRAGE FONCTION AFFINE
Le chiffrage affine utilise une fonction affine du type y = (ax + b) pour crypter des données; a et ...

{JAVA / J2EE} CRYPTAGE SELON LA MÉTHODE DE CÉSAR
Classe pour crypter et décrypter un string selon la méthode de César. Les fonctions ne gèrent que l...

{PHP} GÉRER UN .HTPASSWD
Une mini source sans grande prétention: le but est de gérer un fichier .htpasswd de manière à ce que...

{Visual Basic, VB6, VB.NET, VB 2005} STÉGANOGRAPHIE, OU L'ART DE DISSIMULER
Avertissement:pour une utilisation strictement personnelle. Le mot de passe initial est monpasse. C...