Návod: Šifrování a dešifrování řetězců v jazyce Visual Basic
Tento názorný postup ukazuje, jak pomocí třídy šifrovat a dešifrovat řetězce pomocí verze zprostředkovatele kryptografických služeb DESCryptoServiceProvider (CSP) algoritmu Triple Data Encryption Standard ( TripleDES ). Prvním krokem je vytvoření jednoduché obálkové třídy, která zapouzdřuje algoritmus 3DES a ukládá šifrovaná data jako řetězec s kódováním base-64. Potom se tato obálka použije k bezpečnému uložení soukromých uživatelských dat do veřejně přístupného textového souboru.
Šifrování můžete použít k ochraně tajných kódů uživatelů (například hesel) a k nečitelným přihlašovacím údajům neoprávněným uživatelům. To může chránit identitu autorizovaného uživatele před odcizením, což chrání prostředky uživatele a zajišťuje nepochycení. Šifrování může také chránit data uživatele před tím, než k nim budou mít přístup neoprávnění uživatelé.
Další informace najdete v tématu Kryptografické služby.
Důležité
Algoritmy Ovindael (nyní označové jako standard AES (Advanced Encryption Standard) [AES]) a 3DES (Triple Data Encryption Standard) poskytují vyšší zabezpečení než DES, protože jsou výpočetně náročnější. Další informace naleznete v tématech DES a Rijndael.
Vytvoření obálky šifrování
Vytvořte třídu
Simple3Despro zapouzdření metod šifrování a dešifrování.Public NotInheritable Class Simple3Des End ClassNa začátek souboru, který obsahuje třídu , přidejte import oboru názvů
Simple3Deskryptografie.Imports System.Security.CryptographyDo třídy
Simple3Despřidejte privátní pole pro uložení zprostředkovatele kryptografických služeb 3DES.Private TripleDes As New TripleDESCryptoServiceProviderPřidejte privátní metodu, která vytvoří pole bajtů zadané délky z hodnoty 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 FunctionPřidejte konstruktor pro inicializaci zprostředkovatele kryptografických služeb 3DES.
Parametr
keyřídí metody aEncryptDataDecryptData.Sub New(ByVal key As String) ' Initialize the crypto provider. TripleDes.Key = TruncateHash(key, TripleDes.KeySize \ 8) TripleDes.IV = TruncateHash("", TripleDes.BlockSize \ 8) End SubPřidejte veřejnou metodu, která zaš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 FunctionPřidejte veřejnou metodu, která 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 FunctionTřídu obálky je teď možné použít k ochraně uživatelských prostředků. V tomto příkladu se používá k bezpečnému ukládání soukromých uživatelských dat do veřejně přístupného textového souboru.
Testování obálky šifrování
Do samostatné třídy přidejte metodu, která používá metodu obálky k zašifrování řetězce a zápisu do Dokumenty
EncryptDatasložky 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 SubPřidejte metodu, která přečte zašifrovaný řetězec ze složky Dokumenty uživatele a dešifruje řetězec pomocí metody
DecryptDataobálky.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 SubPřidejte kód uživatelského rozhraní pro volání
TestEncodingmetodTestDecodinga .Spusťte aplikaci.
Při testování aplikace si všimněte, že pokud zadáte nesprávné heslo, data se dešifrují.