Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 182
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Verschlüsslung von Dateien mit Vernam


Autor: Günther Foidl
Sprache: VB.NET
Bewertung: 9
(1 Bewertung)
Anzahl der Aufrufe: 7250
  
Kick it on dotnet-kicks.de  

Beschreibung:

In diesem Beispiel zeige ich wie Dateien (im Beispiel eine Bilddatei) mit dem Vernam-Algorithmus verschlüsselt werden können.

Dieses Verfahren ist sehr effizient und sehr sicher (solange der Schlüssel geheim bleibt).

Die Verschlüsselung bei Vernam ist eine einfache XOR-Verschlüsselung.


Abgelegt unter: Bild, Verschlüsselung, Sicherheit, Vernam, XOR.



Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Imports System
Imports System.Drawing 		' Verweis einbinden!
Imports System.IO

Namespace VernamVerschlüsselung
	Public Class Program
		Public Shared Sub Main()
			' Bild von Datei einlesen:
			Dim originalImage As Image = Image.FromFile("TestBild.jpg")

			' Bild verschlüsseln:
			EncryptImage(originalImage, "TestBild_verschlüsselt.jpg", "Schlüssel.dat")

			' Bild entschlüsseln:
			Dim newImage As Image = DecryptImage("TestBild_verschlüsselt.jpg", "Schlüssel.dat")

			' Bild in Datei speichern:
			newImage.Save("TestBild_entschlüsselt.jpg")
		End Sub
		'---------------------------------------------------------------------
		''' <summary>
		''' Verschlüsselt ein Bild nach Vernam
		''' </summary>
		''' <param name="img">
		''' zu verschlüsselndes Bild
		''' </param>
		''' <param name="encryptedFile">
		''' Dateiname in dem das verschlüsselte Bild geschrieben wird
		''' </param>
		''' <param name="keyFile">
		''' Dateiname in dem der Schlüssel geschrieben wird
		''' </param>
		Private Shared Sub EncryptImage(ByVal img As Image, ByVal encryptedFile As String, ByVal keyFile As String)
			' Byte-Array aus dem Bild erstellen (könnte auch über 
			' ImageConverter geschehen - bekomme ich aber in VB.net nicht hin)
			Dim originalBytes As Byte()
			Using ms As New MemoryStream()
				img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
				originalBytes = ms.ToArray()
			End Using

			' Schlüssel erzeugen. Hier wird ein Zufallsschlüssel verwendet:
			Dim keyBytes As Byte() = New Byte(originalBytes.Length - 1) {}
			Dim rnd As New Random()
			rnd.NextBytes(keyBytes)

			' Schlüssel speichern:
			Using fs As New FileStream(keyFile, FileMode.Create)
				fs.Write(keyBytes, 0, keyBytes.Length)
			End Using

			' Bild mit Vernam-Algorithmus verschlüsseln (XOR).
			' Die Schlüssellänge entspricht der Originallänge da der
			' Schlüssel so erzeug worden ist.
			Dim encryptedBytes As Byte() = New Byte(originalBytes.Length - 1) {}
			Vernam(originalBytes, keyBytes, encryptedBytes)

			' Speichern des verschlüsselten Bildes. Da die Information
			' im byte-Array kein gültiges Image darstellt kann es nicht
			' als Image behandelt werden.
			Using fs As New FileStream("TestBild_verschlüsselt.jpg", FileMode.Create)
				fs.Write(encryptedBytes, 0, encryptedBytes.Length)
			End Using
		End Sub
		'---------------------------------------------------------------------
		''' <summary>
		''' Entschlüsselt ein Bild nach Vernam
		''' </summary>
		''' <param name="encryptedFile">
		''' Dateiname der verschlüsselten Datei
		''' </param>
		''' <param name="keyFile">
		''' Dateiname der Schlüsseldatei (muss den gleichen Inhalt haben wie 
		''' die Datei die beim Verschlüsseln erstellt wurde)
		''' </param>
		''' <returns>
		''' entschlüsseltes Bild
		''' </returns>
		Private Shared Function DecryptImage(ByVal encryptedFile As String, ByVal keyFile As String) As Image
			' Einlesen der verschlüsselten Bytes:
			Dim encryptedBytes As Byte()
			Using fs As New FileStream(encryptedFile, FileMode.Open)
				encryptedBytes = New Byte(fs.Length - 1) {}
				fs.Read(encryptedBytes, 0, CInt(fs.Length))
			End Using

			' Einlesen des Schlüssels:
			Dim keyBytes As Byte()
			Using fs As New FileStream(keyFile, FileMode.Open)
				keyBytes = New Byte(fs.Length - 1) {}
				fs.Read(keyBytes, 0, CInt(fs.Length))
			End Using

			' Entschlüsseln:
			Dim originalBytes As Byte() = New Byte(encryptedBytes.Length - 1) {}
			Vernam(encryptedBytes, keyBytes, originalBytes)

			' Image aus dem Byte-Array erzeugen:
			Dim ic As New ImageConverter()
			Return TryCast(ic.ConvertFrom(originalBytes), Image)
		End Function
		'---------------------------------------------------------------------
		''' <summary>
		''' Führt die Vernam-Verschlüsselung durch
		''' </summary>
		''' <param name="inBytes"></param>
		''' <param name="keyBytes"></param>
		''' <param name="outBytes"></param>
		Private Shared Sub Vernam(ByVal inBytes As Byte(), ByVal keyBytes As Byte(), ByRef outBytes As Byte())
			' Prüfen der Argumente:
			If (inBytes.Length <> keyBytes.Length) OrElse (keyBytes.Length <> outBytes.Length) Then
				Throw New ArgumentException("Ungleiche Länge")
			End If
			For i As Integer = 0 To inBytes.Length - 1

				' XOR:
				outBytes(i) = CByte((inBytes(i) Xor keyBytes(i)))
			Next
		End Sub
	End Class
End Namespace

Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



Diese Snippets könnten für Sie interessant sein:
[VB.NET] Bildgröße verändern (Verhältnis)
[VB.NET] Bildgröße verändern (Prozentual)
[VB.NET] Bildgröße verändern (Manuell)
[VB.NET] Neues Größenverhältnis eines Bilds berechnen
[VB.NET] JPEG Bild komprimieren
[VB.NET] Bild Transparent machen mit ColorMatrix
[VB.NET] Farben eines Bilds umkehren
[VB.NET] Bild in Graustufen umwandeln
[C#] GDI+ und das Paint Event
[C#] Bild anzeigen - Datei schließen
[VB.NET] Text auf Bild zeichnen
[C#] Größe verändern von Bildern
[ASP.net] Datei nach Bildupload prüfen
[C#] GetEuclidicDistance
[VB.NET] Bitmap Differenz Analyse
[C#] Bild drehen (nach Winkelangabe)
[C#] Bildgröße im Verhältnis verändern (Interpoliert)
[C#] Bild von einem Control oder Panel
[VB.NET] Bildausschnitt auslesen
[VB.NET] Bildgröße im Verhältnis verändern (Interpoliert)
[VB.NET] Bildgröße prozentual verändern (Interpoliert)
[VB.NET] Bildgröße in beiden Dimensionen verändern (Interpoliert)
[VB.NET] Alle Pixel einer bestimmten Farbe neu einfärben
[C#] Bild steht auf reflektierendem Grund
[C#] Bilder verkleinern, beschneiden und beides gleichzeitig
[C#] Bild splitten
[VB.NET] Bytearray to Image / Image to Bytearray
[C#] Text2Bitmap (String in Bild umwandeln)
[C#] Hintergrundfarbe Transparenter Bilder (z.B. PNG) ändern
[C#] Größe eines Bildes mit mit gleichem Seitenverhältniss ändern
[C#] externes Programm aufrufen (andere Version) mit Parameter
[C#] Herausfinden welches Programm ein bestimmtes Dokument öffnet
[C#] Bitmap schneller in Graustufen wandeln
[C#] Bilder aus *.resx Ressourcen Dateien in WPF verwenden
[VB.NET] Bild mit allen farben (True Color 16 Millionen Farben)
[C#] Schwarzweiß Bilder mit einem Farbverlauf füllen
[C#] Bild rotieren mit C#
[VB.NET] Dateiverschlüsselung mit Rijndael
[VB.NET] Datenverschlüsselungsklasse
[C#] Verschlüsslung von Dateien mit Vernam
[C#] Dataset verschlüsseln
[C++] Caesar
[C#] Erstellt einen md5-Hash aus einem string
[C#] Caesar-Chiffre
[C#] RC4 Verschlüsselung
[C#] Encrypt and Decrypt Strings
[C#] XOR Verschlüsselung
[C#] String zu MD5
[C#] Auf Mitgliedschaft einer Windows-Sicherheitsgruppe prüfen
[C#] Sicherheit von Verzeichnisssen und Dateien ändern
[C#] Prüfen ob in einem Verzeichnis Schreibrechte verfügbar sind!
[VB.NET] Werte zweier Variablen tauschen
[C#] C# XOR Crypt

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.