Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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ć TripleDES klasy do szyfrowania i odszyfrowywania ciągów przy użyciu algorytmu Triple Data Encryption Standard (3DES). 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 ClassDodaj import przestrzeni nazw kryptografii na początku pliku zawierającego klasę
Simple3Des.Imports System.Security.CryptographyW klasie
Simple3Desdodaj pole prywatne do przechowywania usługi dostawcy kryptograficznego 3DES.Private TripleDes As TripleDES = TripleDES.Create()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() Using sha256 As SHA256 = SHA256.Create() ' Hash the key. Dim keyBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(key) Dim hash() As Byte = sha256.ComputeHash(keyBytes) ' Truncate or pad the hash. ReDim Preserve hash(length - 1) Return hash End Using End FunctionDodaj konstruktor, aby zainicjować algorytm kryptograficzny 3DES.
Parametr
keysteruje metodamiEncryptDataiDecryptData.Sub New(ByVal key As String) ' Initialize the crypto provider. TripleDes.Key = TruncateHash(key, TripleDes.KeySize \ 8) TripleDes.IV = TruncateHash("", TripleDes.BlockSize \ 8) End SubDodaj 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 FunctionDodaj 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 FunctionKlasa 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
EncryptDatado 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 SubDodaj 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 SubDodaj kod interfejsu użytkownika do wywołania metod
TestEncodingiTestDecoding.Uruchom aplikację.
Podczas testowania aplikacji zwróć uwagę, że nie będzie ona odszyfrowywać danych, jeśli podasz nieprawidłowe hasło.