Návod: Šifrování a dešifrování řetězců v jazyce Visual Basic
Tento návod ukazuje, jak použít DESCryptoServiceProvider třídy k šifrování a dešifrování řetězců pomocí poskytovatel metadat kryptografických (CSP) verzi Triple Data Encryption Standard (TripleDES) algoritmus.Prvním krokem je vytvoření jednoduché Obálková třída, která zapouzdřuje algoritmus 3DES a ukládá šifrovaná data jako řetězec kódováním base-64.Tento obal je použito k zabezpečenému uložení soukromých uživatelských dat v souboru veřejně přístupný text.
Šifrování můžete chránit tajemství uživatele (například hesla) a aby nečitelná pověření neoprávnění uživatelé.To lze chránit oprávněný uživatel identitu je odcizen, která chrání uživatele aktiv a poskytuje odmítnutí.Šifrování můžete také chránit data uživatele před přístupem neoprávněných uživatelů.
Další informace naleznete v tématu Šifrovací služby.
![]() |
---|
Rijndael (nyní označuje jako standard AES (Advanced Encryption Standard) [AES]) a algoritmus Triple Data Encryption Standard (3DES) poskytuje větší zabezpečení než algoritmus DES, protože jsou více výpočetně náročné.Další informace naleznete v tématu DES a Rijndael. |
Vytvořit obálky šifrování
Vytvořit Simple3Des třídy zapouzdřují metody šifrování a dešifrování.
Public NotInheritable Class Simple3Des End Class
Přidejte na začátek souboru, který obsahuje import oboru kryptografie Simple3Des třídy.
Imports System.Security.Cryptography
V Simple3Des třídy přidejte soukromé pole k uložení poskytovatel metadat šifrování 3DES.
Private TripleDes As New TripleDESCryptoServiceProvider
Přidáte soukromá metoda, která vytvoří bajtové pole určené délky z hash zadaného klíče.
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
Přidejte konstruktor k inicializaci poskytovatel metadat šifrování 3DES.
key Parametr prvky EncryptData a DecryptData metod.
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
Přidáte veřejnou metodu, která šifruje řetězec.
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
Přidáte veřejnou metodu, která je dešifruje řetězec.
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
Obálkové třídy lze nyní chrání uživatele aktiva.V tomto příkladu se používá k zabezpečenému uložení soukromých uživatelských dat veřejně přístupné textového souboru.
Test šifrování obálky
V samostatné třídě přidejte metodu, která používá Obálka EncryptData složky Dokumenty uživatele metodu šifrování řetězce a zápis pro uživatele.
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
Přidejte metodu, která čte zašifrovaná řetězec od uživatele pro složky Dokumenty a dešifruje řetězec s Obálka DecryptData metoda.
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
Přidání kódu uživatelského rozhraní pro volání TestEncoding a TestDecoding metod.
Spusťte aplikaci.
Při testování aplikace oznámení data jej nelze dešifrovat, pokud zadáte nesprávné heslo.