【问题标题】:username still clears if it already exists如果用户名已经存在,它仍然会被清除
【发布时间】:2013-09-29 12:55:21
【问题描述】:

这是我的代码,它用于登录系统,非常基本,只需将用户名和密码写入文本文件,然后在另一个表单的登录屏幕上进行比较。这是注册用户代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication2
{
public partial class Form2 : Form
{
    private void Form2_Load(object sender, EventArgs e)
    {
        pictureBox2.SizeMode = PictureBoxSizeMode.Zoom;
    }

    public Form2()
    {
        InitializeComponent();
    }
    public bool radioButtons()
    {
        if (!userRadioButton.Checked && !adminRadioButton.Checked)
        {
            MessageBox.Show("You must select an account type");
            return false;
        }
        else
        {
            return true;
        }
    }

    public void button1_Click(object sender, EventArgs e)
    {
        bool a = radioButtons();
        if (a == true)
        {
            string userName = userNameBox.Text;
            string password = passwordBox.Text;
            var userNames = File.ReadAllLines(@"C:\Other\myFile.txt");
            if (checkUsernameValid() && checkUsernameNotExist() && checkPasswordsValid() && checkPasswordsMatch())
            {
                allOK();
            }


        }   
    } 
    public void mySW()
    {
         string path = @"C:\Other\myFile.txt";
        string userName = userNameBox.Text;
        string password = passwordBox.Text;
        using (StreamWriter writer = new StreamWriter(path, true))
        {
            writer.WriteLine("Username and Password: {0} {1}",userName,password);
            writer.WriteLine();
            writer.Close();
            writer.Dispose();
        }
        MessageBox.Show("Thanks for registering! \n\nYou may now log in!","Registration SuccessFul");
        Application.OpenForms[0].Show();
        this.Close();
    }
    public bool checkUsernameValid()
    {
        if (userNameBox.Text == "")
        {
            MessageBox.Show("Username cannot be empty", "Invalid Username Entry");
            return false;
        }
        else
            return true;
    }
    public bool checkPasswordsMatch()
    {
        if (!passwordBox.Text.Equals(repeatPasswordBox.Text))
        {
            MessageBox.Show("Sorry, your passwords do not match, try again", "Password Error");
            passwordBox.Text = "";
            repeatPasswordBox.Text = "";
            return false;
        }
        else
            return true;
    }
    public bool checkUsernameNotExist()
    {
        if (userNameBox.Text.Contains("Username: " + userNameBox.Text))
        {
            MessageBox.Show("Sorry, that user name is not available, try again", "Invalid Username Entry");
            userNameBox.Text = "";
            passwordBox.Text = "";
            repeatPasswordBox.Text = "";
            return false;
        }
        else
            return true;
    }
    public void allOK()
    {
        if (!userNameBox.Text.Contains("Username: " + userNameBox.Text) && passwordBox.Text == repeatPasswordBox.Text)
            {
                mySW();
            }
    }
    public bool checkPasswordsValid()
    {
        if (passwordBox.Text == "")
        {
            MessageBox.Show("Password fields cannot be empty", "Password Error");
            return false;
        }
        else
            return true;
    }

   }
}

如果我输入用户名,它会进行所有检查和注册,但是,如果用户名已经存在,它仍然允许我注册???

【问题讨论】:

  • 你不应该是hashing那些密码吗?
  • 如代码中所见,如果成功,程序将用户名和密码输出到C:\Other\myFile.txt。但是正如我所说,您可以使用用户名注册,然后使用相同的用户名注册不同的密码或人
  • if (userNameBox.Text.Contains("Username: " + userNameBox.Text)) 你觉得有什么作用?
  • 不要以纯文本形式存储密码。使用 PBKDFv2。
  • 我真的应该,如果我有时间学习,我会让它更安全,但老实说,它只是针对一个本地应用程序,只能由少数公司员工运行,它的密码受到保护并不是一件重要的事情。真正需要的最大努力是我为保存密码文件而制作的隐藏文件夹

标签: c# .net winforms


【解决方案1】:
if (userNameBox.Text.Contains("Username: " + userNameBox.Text))

我对这条线感到困惑。 (这条线在任何时候都会给出相同的结果,如True

但我给你一个想法

。将注册值存储在数据库中,然后第二次用户给出相同的用户名,然后使用sql查询检查用户名是否存在。

查看之前的讨论:Checking if username already exists within the databasae

【讨论】:

    【解决方案2】:

    插入一个名为“用户列表”的富文本框。将可见设置为 false,并确保先清除它。

     public bool checkUsernameNotExist()
        {
            string readfile = System.IO.File.ReadAllText(@"C:\file.txt");
            userlist.Text = readfile;
            for (int i = 0; i < userlist.Lines.Length; i++)
            {
                string line = userlist.Lines[i];
                if (line.Contains("Username: " + userNameBox.Text))
                {
                    MessageBox.Show("Sorry, that user name is not available, try again", "Invalid Username Entry");
                    userNameBox.Text = "";
                    passwordBox.Text = "";
                    repeatPasswordBox.Text = "";
                    return false;
                }
                else
                    return true;
            }
    

    您可以通过这样做来加密/解密用户名:

    void encrypt()
    {
    string encrypted = "";
    string encryptstr = yourtextBox.Text;
    int encryptnum = 15; //The bigger the number, the stronger the encryption
    char[] toencrypt = encryptstr.ToCharArray();
    for (int i = 0; i < toencrypt.Length; i++)
    int num = Convert.ToInt32(toencrypt[i]) + encryptnum;
    string output = Convert.ToChar(num).ToString();
    encrypted += output;
    }
    
    void decrypt() 
    {
    string decrypted = "";
    string decryptstr = yourtextBox.Text;
    int decryptnum = 15; //This must be the same as you used to encrypt
    char[] todecrypt = decryptstr.ToCharArray();
    for (int i = 0; i < todecrypt.Length; i++)
    int num = Convert.ToInt32(todecrypt[i]) - decryptnum;
    string output = Convert.ToChar(num).ToString();
    decrypted += output;
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 2011-01-18
      • 1970-01-01
      • 2013-04-03
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多