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 : 8940
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} CRYPTEUR/DECRYPTEUR
Un petit crypteur/decrypteur pour coder vos messages. Il suffit de utiliser le numéro du caractère ...

{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} CRYPTER ET DÉCRYPTER TOUS TYPES DE FICHIERS "TEXTE ,IMAGES, SONS, TABLEURS, ZIP ETC..."
Après maintes recherches sur le net sans succès, je mets cette source en ligne en espérant pouvoir ...

{Visual Basic, VB6, VB.NET, VB 2005} CRYPTER-DÉCRYPTER UN TEXTE - TEXTE CRYPTÉ UNIQUEMENT EN MAJUSCULES - V2
Reprend le sujet traité par DarKeenu (cryptage-décryptage à l'aide d'une clé) La différence est que...

{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} SECURITEMESSAGE,CRYPTER,CRYPTOGRAPHIE
Ce logiciel de securité permet de causer en securité tout en cryptant vos msgs grâce à une clé qui v...

{Delphi} EXE PROTECTOR V1
Exe Protector est un logiciel qui permet de protéger par un mot de passe et crypter (Xor) un exécuta...

{JAVA / J2EE} CRYPTOGRAPHIE
Ce package regroupe différents types de chiffrements. Certains sont juste des applications du packag...

{Python} CRYPTE ET DECRYPTE UN FICHIER (AVEC HASH POUR VÉRIFICATION)
Cryptage avec plusieurs niveaux. Description rapide du fonctionnement du script: CRYPTE 0/ lire...