Usuário com melhor resposta
[VB.NET] Salvar texto de uma Textbox

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.
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
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
-
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ê.
-
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ê.
-
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