none
[VB.NET] Salvar texto de uma Textbox RRS feed

  • Pergunta

  • Oque eu quero é o seguinte, já fiz um sistema de login e está tudo correto, porém eu quero por a opção de "Lembrar usuário" ou "Lembrar senha" em uma checkbox para evitar que o membro digite o usuário e a senha toda vez que for logar.

    Tem como fazer esse sistema sem ter que criar arquivo XML ou TXT externo?Se tiver por favor me digam, se não houver me mostrem também que vai ser a única opção...

    Obrigado.

    segunda-feira, 20 de janeiro de 2014 19:27

Respostas

  • Ok, então vou te dar um exemplo de como fazer, veja se é útil. No código que vou usar você vai chamar uma função quando o usuário validar o login (no seu botão de login, você faz toda a rotina que você já tem pronta e depois é só chamar a função "Lembrar"; quando carregar o programa use a função "Recordar" (botei os nomes assim pra ficar fácil... e divertido também. Fazer o que?

    Eu deixei um pouquinho complicado o arquivo, mas bem pouco mesmo - o seu programa não vai precisar se preocupar com isso, porque a função fará tudo sozinha.

    Public Module Encryption
        Private Function Encrypter(ByVal Text As String, ByVal IsEncrypt As Boolean) As String
            Const _pass As String = "AA.BB.CC.123" 'Aleatório, sem motivo para ser esse valor
            Const _salt As String = "AB13.657"     'Aleatório, sem motivo para ser esse valor
            Dim cipherBytes As Byte() = {}
            If IsEncrypt Then
                cipherBytes = System.Text.Encoding.Unicode.GetBytes(Text)
            Else
                cipherBytes = System.Convert.FromBase64String(Text)
            End If
            Dim pdb As System.Security.Cryptography.Rfc2898DeriveBytes = New System.Security.Cryptography.Rfc2898DeriveBytes(_pass, System.Text.Encoding.Unicode.GetBytes(_salt))
            Try
                Dim alg As System.Security.Cryptography.Rijndael = System.Security.Cryptography.Rijndael.Create()
                alg.Key = pdb.GetBytes(32)
                alg.IV = pdb.GetBytes(16)
                Dim cs As System.Security.Cryptography.CryptoStream
                Dim ms As New System.IO.MemoryStream()
                If IsEncrypt Then
                    cs = New System.Security.Cryptography.CryptoStream(ms, alg.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
                Else
                    cs = New System.Security.Cryptography.CryptoStream(ms, alg.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
                End If
                cs.Write(cipherBytes, 0, cipherBytes.Length)
                cs.FlushFinalBlock()
                cs.Close()
                Dim decryptedData As Byte() = ms.ToArray()
                If IsEncrypt Then
                    Return System.Convert.ToBase64String(decryptedData)
                Else
                    Return System.Text.Encoding.Unicode.GetString(decryptedData)
                End If
            Catch
                Return ""
            End Try
        End Function
    
        Private Function GetFile() As String
            Return System.Windows.Forms.Application.StartupPath + "\last.ini"
        End Function
    
        Public Function Lembrar(ByVal Usuario As String, ByVal Senha As String) As Boolean
            Dim File As String = Encryption.GetFile()
            'Try
            If System.IO.File.Exists(File) Then System.IO.File.Delete(File)
            System.IO.File.WriteAllLines(File, {Encryption.Encrypter(Usuario, True), Encryption.Encrypter(Senha, True)})
            Return System.IO.File.Exists(File)
            'Catch
            'Return False
            'End Try
        End Function
    
        Public Function Recordar(ByRef Usuario As String, ByVal Senha As String) As Boolean
            Dim File As String = Encryption.GetFile()
            If Not System.IO.File.Exists(File) Then Return False
            Try
                Dim Lines() As String = System.IO.File.ReadAllLines(File)
                If Not Lines.Length = 2 Then Return False
                Usuario = Encryption.Encrypter(Lines(0), False)
                Senha = Encryption.Encrypter(Lines(1), False)
                Return True
            Catch
                Return False
            End Try
        End Function
    End Module

    Faça um teste rápido, abra um form em um projeto novo e copie:

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            If Not Encryption.Lembrar("Este Usuário", "Este Teste") Then Exit Sub
            Dim Usuario As String = ""
            Dim Senha As String = ""
            If Not Encryption.Recordar(Usuario, Senha) Then Exit Sub
            System.Windows.Forms.MessageBox.Show("Pronto! Usuário [" + Usuario + "] e Senha [" + Senha + "]")
        End Sub
    End Class

    Espero ter ajudado

    • Sugerido como Resposta SammuelMiranda quarta-feira, 22 de janeiro de 2014 15:50
    • Marcado como Resposta Giovani Cr terça-feira, 28 de janeiro de 2014 12:48
    quarta-feira, 22 de janeiro de 2014 15:50

Todas as Respostas

  • sim cara vai ter q criar um arquivo ai .config, seria bom q depois q utiliza-se o arquivo renomear ele pra outra extensão e ainda criar uma criptografia para senha para que não venha alguém e fique olhando a senha do outro usuario!

    --Rafael Albuquerque

    segunda-feira, 20 de janeiro de 2014 20:54
  • Gabriel, você pode gravar um arquivo com qualquer extensão, gravar no registro do windows ou - supondo que este programa se conecta a um servidor de banco de dados, que valida do login - você pode quardar o MAC/IP ou nome do PC - ou qualquer outra identificação que você desejar - para saber que aquela máquina é para ser lembrada como determinado usuário, e salvar esta identificação no BD. Assim que o programa abrir, você faz a query no DB se essa máquina está listada, e para qual usuário (não acho a melhor ideia, mas estou apenas te mostrando possibilidades - você decide o que é melhor).

    Se você for gravar no PC (seja arquivo, ou uma chave no registro do windows), aconselho você a primeiro "camuflar" o usuário e senha para gravar, pois este arquivo (ou registro), não importa o quanto você esconda nas pastas, outro usuário pode procura-lo, abri-lo e ver o conteúdo. Use o MD5 (que já tem a função no .Net) ou escreva uma função, tão simples quando quiser, para alterar o texto de nome e senha antes de gravar no arquivo.

    Qualquer uma das forma que você quiser prosseguir, responda que eu coloco um código exemplo para você.

    terça-feira, 21 de janeiro de 2014 13:18
  • Gabriel, você pode gravar um arquivo com qualquer extensão, gravar no registro do windows ou - supondo que este programa se conecta a um servidor de banco de dados, que valida do login - você pode quardar o MAC/IP ou nome do PC - ou qualquer outra identificação que você desejar - para saber que aquela máquina é para ser lembrada como determinado usuário, e salvar esta identificação no BD. Assim que o programa abrir, você faz a query no DB se essa máquina está listada, e para qual usuário (não acho a melhor ideia, mas estou apenas te mostrando possibilidades - você decide o que é melhor).

    Se você for gravar no PC (seja arquivo, ou uma chave no registro do windows), aconselho você a primeiro "camuflar" o usuário e senha para gravar, pois este arquivo (ou registro), não importa o quanto você esconda nas pastas, outro usuário pode procura-lo, abri-lo e ver o conteúdo. Use o MD5 (que já tem a função no .Net) ou escreva uma função, tão simples quando quiser, para alterar o texto de nome e senha antes de gravar no arquivo.

    Qualquer uma das forma que você quiser prosseguir, responda que eu coloco um código exemplo para você.

    Vllw cara pela dica e por me mostra as outras opções achei melhor a 1º mais e um poco complicado vllw.
    quarta-feira, 22 de janeiro de 2014 03:36
  • Ok, então vou te dar um exemplo de como fazer, veja se é útil. No código que vou usar você vai chamar uma função quando o usuário validar o login (no seu botão de login, você faz toda a rotina que você já tem pronta e depois é só chamar a função "Lembrar"; quando carregar o programa use a função "Recordar" (botei os nomes assim pra ficar fácil... e divertido também. Fazer o que?

    Eu deixei um pouquinho complicado o arquivo, mas bem pouco mesmo - o seu programa não vai precisar se preocupar com isso, porque a função fará tudo sozinha.

    Public Module Encryption
        Private Function Encrypter(ByVal Text As String, ByVal IsEncrypt As Boolean) As String
            Const _pass As String = "AA.BB.CC.123" 'Aleatório, sem motivo para ser esse valor
            Const _salt As String = "AB13.657"     'Aleatório, sem motivo para ser esse valor
            Dim cipherBytes As Byte() = {}
            If IsEncrypt Then
                cipherBytes = System.Text.Encoding.Unicode.GetBytes(Text)
            Else
                cipherBytes = System.Convert.FromBase64String(Text)
            End If
            Dim pdb As System.Security.Cryptography.Rfc2898DeriveBytes = New System.Security.Cryptography.Rfc2898DeriveBytes(_pass, System.Text.Encoding.Unicode.GetBytes(_salt))
            Try
                Dim alg As System.Security.Cryptography.Rijndael = System.Security.Cryptography.Rijndael.Create()
                alg.Key = pdb.GetBytes(32)
                alg.IV = pdb.GetBytes(16)
                Dim cs As System.Security.Cryptography.CryptoStream
                Dim ms As New System.IO.MemoryStream()
                If IsEncrypt Then
                    cs = New System.Security.Cryptography.CryptoStream(ms, alg.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
                Else
                    cs = New System.Security.Cryptography.CryptoStream(ms, alg.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
                End If
                cs.Write(cipherBytes, 0, cipherBytes.Length)
                cs.FlushFinalBlock()
                cs.Close()
                Dim decryptedData As Byte() = ms.ToArray()
                If IsEncrypt Then
                    Return System.Convert.ToBase64String(decryptedData)
                Else
                    Return System.Text.Encoding.Unicode.GetString(decryptedData)
                End If
            Catch
                Return ""
            End Try
        End Function
    
        Private Function GetFile() As String
            Return System.Windows.Forms.Application.StartupPath + "\last.ini"
        End Function
    
        Public Function Lembrar(ByVal Usuario As String, ByVal Senha As String) As Boolean
            Dim File As String = Encryption.GetFile()
            'Try
            If System.IO.File.Exists(File) Then System.IO.File.Delete(File)
            System.IO.File.WriteAllLines(File, {Encryption.Encrypter(Usuario, True), Encryption.Encrypter(Senha, True)})
            Return System.IO.File.Exists(File)
            'Catch
            'Return False
            'End Try
        End Function
    
        Public Function Recordar(ByRef Usuario As String, ByVal Senha As String) As Boolean
            Dim File As String = Encryption.GetFile()
            If Not System.IO.File.Exists(File) Then Return False
            Try
                Dim Lines() As String = System.IO.File.ReadAllLines(File)
                If Not Lines.Length = 2 Then Return False
                Usuario = Encryption.Encrypter(Lines(0), False)
                Senha = Encryption.Encrypter(Lines(1), False)
                Return True
            Catch
                Return False
            End Try
        End Function
    End Module

    Faça um teste rápido, abra um form em um projeto novo e copie:

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            If Not Encryption.Lembrar("Este Usuário", "Este Teste") Then Exit Sub
            Dim Usuario As String = ""
            Dim Senha As String = ""
            If Not Encryption.Recordar(Usuario, Senha) Then Exit Sub
            System.Windows.Forms.MessageBox.Show("Pronto! Usuário [" + Usuario + "] e Senha [" + Senha + "]")
        End Sub
    End Class

    Espero ter ajudado

    • Sugerido como Resposta SammuelMiranda quarta-feira, 22 de janeiro de 2014 15:50
    • Marcado como Resposta Giovani Cr terça-feira, 28 de janeiro de 2014 12:48
    quarta-feira, 22 de janeiro de 2014 15:50