Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przewodniku pokazano, jak używać DESCryptoServiceProvider klasy do szyfrowania i odszyfrowywania ciągów przy użyciu wersji dostawcy usług kryptograficznych (CSP) algorytmu Triple Data Encryption Standard (TripleDES). Pierwszym krokiem jest utworzenie prostej klasy otoki, która hermetyzuje algorytm 3DES i przechowuje zaszyfrowane dane jako ciąg zakodowany w formacie base-64. Następnie to opakowanie służy do bezpiecznego przechowywania prywatnych danych użytkownika w pliku tekstowym czytelnym dla wszystkich.
Szyfrowanie służy do ochrony wpisów tajnych użytkownika (na przykład haseł) i tworzenia poświadczeń nieczytelnych przez nieautoryzowanych użytkowników. Dzięki czemu można chronić tożsamość autoryzowanego użytkownika przed kradzieżą, co chroni zasoby użytkownika i zapewnia niezaprzeczalność. Szyfrowanie może również chronić dane użytkownika przed uzyskaniem dostępu przez nieautoryzowanych użytkowników.
Aby uzyskać więcej informacji, zobacz Usługi kryptograficzne.
Ważne
Algorytmy Rijndael (określane obecnie jako Advanced Encryption Standard [AES]) i Triple Data Encryption Standard (3DES) zapewniają większe bezpieczeństwo niż DES, ponieważ są bardziej intensywnie obliczeniowe. Aby uzyskać więcej informacji, zobacz DES i Rijndael.
Aby utworzyć opakowanie szyfrowania
Utwórz klasę
Simple3Des
, aby hermetyzować metody szyfrowania i odszyfrowywania.Public NotInheritable Class Simple3Des End Class
Dodaj import przestrzeni nazw kryptografii na początku pliku zawierającego klasę
Simple3Des
.Imports System.Security.Cryptography
W klasie
Simple3Des
dodaj pole prywatne do przechowywania usługi dostawcy kryptograficznego 3DES.Private TripleDes As New TripleDESCryptoServiceProvider
Dodaj metodę prywatną, która tworzy tablicę bajtów o określonej długości na podstawie skrótu określonego klucza.
Private Function TruncateHash( ByVal key As String, ByVal length As Integer) As Byte() Dim sha1 As New SHA1CryptoServiceProvider ' Hash the key. Dim keyBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(key) Dim hash() As Byte = sha1.ComputeHash(keyBytes) ' Truncate or pad the hash. ReDim Preserve hash(length - 1) Return hash End Function
Dodaj konstruktor, aby zainicjować dostawcę usług kryptograficznych 3DES.
Parametr
key
steruje metodamiEncryptData
iDecryptData
.Sub New(ByVal key As String) ' Initialize the crypto provider. TripleDes.Key = TruncateHash(key, TripleDes.KeySize \ 8) TripleDes.IV = TruncateHash("", TripleDes.BlockSize \ 8) End Sub
Dodaj metodę publiczną, która szyfruje ciąg.
Public Function EncryptData( ByVal plaintext As String) As String ' Convert the plaintext string to a byte array. Dim plaintextBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(plaintext) ' Create the stream. Dim ms As New System.IO.MemoryStream ' Create the encoder to write to the stream. Dim encStream As New CryptoStream(ms, TripleDes.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write) ' Use the crypto stream to write the byte array to the stream. encStream.Write(plaintextBytes, 0, plaintextBytes.Length) encStream.FlushFinalBlock() ' Convert the encrypted stream to a printable string. Return Convert.ToBase64String(ms.ToArray) End Function
Dodaj metodę publiczną, która odszyfrowuje ciąg.
Public Function DecryptData( ByVal encryptedtext As String) As String ' Convert the encrypted text string to a byte array. Dim encryptedBytes() As Byte = Convert.FromBase64String(encryptedtext) ' Create the stream. Dim ms As New System.IO.MemoryStream ' Create the decoder to write to the stream. Dim decStream As New CryptoStream(ms, TripleDes.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write) ' Use the crypto stream to write the byte array to the stream. decStream.Write(encryptedBytes, 0, encryptedBytes.Length) decStream.FlushFinalBlock() ' Convert the plaintext stream to a string. Return System.Text.Encoding.Unicode.GetString(ms.ToArray) End Function
Klasa opakowująca może teraz służyć do ochrony zasobów użytkownika. W tym przykładzie jest używany do bezpiecznego przechowywania prywatnych danych użytkownika w publicznie dostępnym pliku tekstowym.
Aby przetestować warstwę szyfrowania
W oddzielnej klasie dodaj metodę, która używa metody wrappera
EncryptData
do szyfrowania ciągu i zapisz go do folderu Moje dokumenty użytkownika.Sub TestEncoding() Dim plainText As String = InputBox("Enter the plain text:") Dim password As String = InputBox("Enter the password:") Dim wrapper As New Simple3Des(password) Dim cipherText As String = wrapper.EncryptData(plainText) MsgBox("The cipher text is: " & cipherText) My.Computer.FileSystem.WriteAllText( My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\cipherText.txt", cipherText, False) End Sub
Dodaj metodę, która odczytuje zaszyfrowany ciąg z folderu Moje Dokumenty użytkownika i odszyfrowuje ciąg za pomocą metody wrappera
DecryptData
.Sub TestDecoding() Dim cipherText As String = My.Computer.FileSystem.ReadAllText( My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\cipherText.txt") Dim password As String = InputBox("Enter the password:") Dim wrapper As New Simple3Des(password) ' DecryptData throws if the wrong password is used. Try Dim plainText As String = wrapper.DecryptData(cipherText) MsgBox("The plain text is: " & plainText) Catch ex As System.Security.Cryptography.CryptographicException MsgBox("The data could not be decrypted with the password.") End Try End Sub
Dodaj kod interfejsu użytkownika do wywołania metod
TestEncoding
iTestDecoding
.Uruchom aplikację.
Podczas testowania aplikacji zwróć uwagę, że nie będzie ona odszyfrowywać danych, jeśli podasz nieprawidłowe hasło.