Problème de Déchiffrement de Fichiers
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Salut à tous,
J'ai récemment rencontré un problème avec un programme que j'ai développé en utilisant VB.NET pour chiffrer et déchiffrer des fichiers à l'aide de l'algorithme AES-128. Le chiffrement fonctionne correctement, mais le déchiffrement semble être problématique lorsque j'utilise des clés différentes.
Voici comment fonctionne mon programme :
- Je chiffre un dossier entier de fichiers à l'aide d'une clé de chiffrement.
- Plus tard, je tente de déchiffrer ce dossier en utilisant une clé de déchiffrement différente.
Le problème est que le déchiffrement réussit même lorsque j'utilise des clés de chiffrement et de déchiffrement différentes, ce qui ne devrait pas être le cas. Normalement, avec des clés différentes, le déchiffrement devrait échouer.
Informations supplémentaires :
- Plateforme : Windows 11
- Algorithme de chiffrement : AES-128
- Langage de programmation : VB.NET
Voici le code que j'utilise :
Imports System.IO Imports System.Security.Cryptography Imports System.Text Public Class Form1 Public Shared Sub Encrypt(ByVal inputFile As String, ByVal outputFile As String, ByVal key As String) Dim aesAlg As New AesCryptoServiceProvider() aesAlg.KeySize = 128 aesAlg.BlockSize = 128 aesAlg.Mode = CipherMode.CFB ' Vous devez vous assurer que la clé a la longueur correcte (16 octets) Dim keyBytes As Byte() = Encoding.UTF8.GetBytes(key) Array.Resize(keyBytes, 16) aesAlg.Key = keyBytes ' Générez un IV aléatoire aesAlg.GenerateIV() Using encryptor As ICryptoTransform = aesAlg.CreateEncryptor() Using fsInput As New FileStream(inputFile, FileMode.Open) Using fsEncrypted As New FileStream(outputFile, FileMode.Create) ' Écrivez l'IV dans le fichier chiffré (les 16 premiers octets) fsEncrypted.Write(aesAlg.IV, 0, aesAlg.IV.Length) Using cryptoStream As New CryptoStream(fsEncrypted, encryptor, CryptoStreamMode.Write) Dim buffer(4096) As Byte Dim bytesRead As Integer Do bytesRead = fsInput.Read(buffer, 0, buffer.Length) If bytesRead > 0 Then cryptoStream.Write(buffer, 0, bytesRead) End If Loop While bytesRead > 0 End Using End Using End Using End Using End Sub Public Shared Sub Decrypt(ByVal inputFile As String, ByVal outputFile As String, ByVal key As String) Dim aesAlg As New AesCryptoServiceProvider() aesAlg.KeySize = 128 aesAlg.BlockSize = 128 aesAlg.Mode = CipherMode.CFB ' Vous devez vous assurer que la clé a la longueur correcte (16 octets) Dim keyBytes As Byte() = Encoding.UTF8.GetBytes(key) Array.Resize(keyBytes, 16) aesAlg.Key = keyBytes ' Lisez l'IV du fichier chiffré Dim ivBytes(15) As Byte Using fsEncrypted As New FileStream(inputFile, FileMode.Open) fsEncrypted.Read(ivBytes, 0, ivBytes.Length) End Using aesAlg.IV = ivBytes Using decryptor As ICryptoTransform = aesAlg.CreateDecryptor() Using fsEncrypted As New FileStream(inputFile, FileMode.Open) ' Passez les 16 premiers octets de l'IV fsEncrypted.Seek(16, SeekOrigin.Begin) Using fsOutput As New FileStream(outputFile, FileMode.Create) Using cryptoStream As New CryptoStream(fsEncrypted, decryptor, CryptoStreamMode.Read) Dim buffer(4096) As Byte Dim bytesRead As Integer Do bytesRead = cryptoStream.Read(buffer, 0, buffer.Length) If bytesRead > 0 Then fsOutput.Write(buffer, 0, bytesRead) End If Loop While bytesRead > 0 End Using End Using End Using End Using End Sub Public Shared Sub EncryptFolder(ByVal folderPath As String, ByVal key As String) Dim files As String() = Directory.GetFiles(folderPath, "*.*", SearchOption.AllDirectories) For Each file0 In files Dim encryptedFile As String = file0 & ".protected" Encrypt(file0, encryptedFile, key) File.Delete(file0) Next End Sub Public Shared Sub DecryptFolder(ByVal folderPath As String, ByVal key As String) Dim encryptedFiles As String() = Directory.GetFiles(folderPath, "*.protected", SearchOption.AllDirectories) For Each encryptedFile In encryptedFiles Dim decryptedFile As String = encryptedFile.Substring(0, encryptedFile.Length - ".protected".Length) Decrypt(encryptedFile, decryptedFile, key) File.Delete(encryptedFile) Next End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim folder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\test" Dim encryptionKey As String = "FG87H4JKIIU4O45DS4hn8e14j8e1fd8zi17" ' Chiffrer le dossier EncryptFolder(folder, encryptionKey) End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim folder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\test" Dim decryptionKey As String = "FG87H4JKIIU4O45DS18" ' Déchiffrer le dossier DecryptFolder(folder, decryptionKey) End Sub End Class
J'ai déjà passé en revue le code et vérifié que les clés sont correctement spécifiées pour le chiffrement et le déchiffrement, mais je ne parviens pas à comprendre pourquoi le déchiffrement réussit avec des clés différentes.
Avez-vous des idées sur ce qui pourrait causer ce comportement inattendu ? Toute aide serait grandement appréciée.
Merci d'avance pour votre aide !
- Problème de Déchiffrement de Fichiers
- Explorateur de fichiers - Guide
- Impossible de supprimer un fichier - Guide
- Gestionnaire de fichiers - Télécharger - Gestion de fichiers
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
2 réponses
C'est pour ça que les outils qui font du chiffrement utilisent des sommes de contrôle ou hash.
Par exemple CRC(16 ou 32), MD5, SHA, ...
Si le hash n'est pas bon, c'est que la clé est erronée ou le fichier chiffré est corrompu.
Quand tu as passé en revue le code, as-tu également lu les lignes 13 et 50.
Comprends-tu ce que fait le programme juste après ces commentaires?
Merci pour votre réponse. Je comprends l'importance de la vérification de l'intégrité des données lors du chiffrement/déchiffrement. Cependant, j'ai rencontré un problème spécifique avec mon code de chiffrement en VB.NET sur Windows 11 en utilisant AES-128.
Le problème est que même si j'utilise des clés différentes pour le chiffrement et le déchiffrement, je peux toujours accéder au fichier déchiffré sans erreur ni altération des données. Cela semble contrevenir aux principes de sécurité du chiffrement.
Avez-vous une idée de ce qui pourrait causer ce problème ou une suggestion pour le résoudre ? Je suis ouvert à toute aide ou conseil que vous pourriez fournir.
bonjour,
le fichier est correctement déchiffré quelle que soit la clé de déchiffrement spécifiée dans le programme?
As-tu essayé avec une clé "01234567890123456"?
Dis comme ça, il faut voir ton code de chiffrement et déchiffrement, tu dois avoir un souci dans ton code, la clé devrait avoir un impacte.