Demonstra Passo a passo: Criptografando e descriptografando strings no Visual Basic
Essa explicação passo a passo mostra como usar a classe DESCryptoServiceProvider para criptografar e descriptografar sequências de caracteres usando a versão provedor de serviços de criptografia (CSP) do algoritmo Triple Data Encryption Standard (TripleDES).A primeira etapa é criar um classe wrapper simples que encapsula o algoritmo 3DES e armazena os dados criptografados como uma sequência codificada de base 64.Em seguida, esse wrapper é usado para armazenar com segurança dados particulares do usuário em um arquivo de texto publicamente acessível.
Você pode usar a criptografia para proteger os segredos do usuário (por exemplo, senhas) e para tornar as credenciais ilegíveis por usuários não autorizados.Isso pode proteger a identidade de um usuário autorizado de ser roubada, o que protege os ativos do usuário e fornece não repúdio.A criptografia também pode proteger dados de um usuário de serem acessados por usuários não autorizados.
Para obter mais informações, consulte Visão geral sobre criptografia.
Observação de segurança: |
---|
O Rijndael (agora conhecido como Advanced Encryption Standard [AES]) e algoritmos Triple Data Encryption Standard (3DES) fornecem uma segurança maior que o DES porque são mais intensivos computacionalmente.Para obter mais informações, consulte DES e Rijndael. |
Para criar o wrapper de criptografia
Adicione uma importação do namespace de criptografia ao início do arquivo.
Imports System.Security.Cryptography
Crie uma classe para encapsular os métodos de criptografia e descriptografia.
Public NotInheritable Class Simple3Des End Class
Adicione um campo particular para armazenar a provedor de serviços de criptografia 3DES.
Private TripleDes As New TripleDESCryptoServiceProvider
Adicione um método particular que cria um matriz de bytes de um comprimento especificado a partir do hash da chave especificada.
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
Adicione um construtor para inicializar o provedor de serviços de criptografia 3DES.
O parâmetro key controla os métodos EncryptData e DecryptData.
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
Adicione um método público que criptografa uma sequência de caracteres.
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
Adicione um método público que descriptografa uma sequência de caracteres.
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
A classe wrapper agora pode ser usada para proteger ativos do usuário.Nesse exemplo, ela é usada para armazenar com segurança dados particulares do usuário em um arquivo de texto publicamente acessível.
Para testar o wrapper de criptografia
Em uma classe separada, adicione um método que usa o método EncryptData do wrapper para criptografar uma sequência de caracteres e escrevê-la na pasta Meus Documentos do usuário.
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
Adicione um método que lê a sequência de caracteres criptografada da pasta Meus Documentos do usuário e descriptografa a sequência de caracteres com o método DecryptData do wrapper.
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
Adicione um código de interface do usuário para chamar os métodos TestEncoding e TestDecoding.
Execute o aplicativo.
Quando você testar o aplicativo, observe que ele não será descriptografar os dados se você fornecer a senha incorreta.
Consulte também
Conceitos
Visão geral sobre criptografia
Referência
Outros recursos
Passo a passos para sequências de caracteres em Visual Basic