用户与密码的对应对比操作
用户类/// summary/// 用户实体类/// /summarypublicclassUser{publicintId{get;set;}publicstringUsername{get;set;}string.Empty;publicstringPasswordHash{get;set;}string.Empty;publicstringSalt{get;set;}string.Empty;publicintRole{get;set;}// 0实验员, 1管理员publicstringRealName{get;set;}string.Empty;publicstringEmail{get;set;}string.Empty;publicDateTimeCreatedAt{get;set;}publicDateTime?LastLoginAt{get;set;}publicboolIsActive{get;set;}true;publicintSyncStatus{get;set;}0;// 0已同步, 1待同步, 2同步失败publicstring?CloudId{get;set;}// 云端用户ID}/// summary/// 获取权限对应的中文名称/// /summarypublicstaticstringGetPermissionName(stringpermission){returnpermissionswitch{ConfigureDevice设备参数配置,ConfigureAlarm报警阈值设置,EditTask任务编辑,ImportExportTask任务导入导出,DataManagement数据管理,UserManagement用户管理,ExecuteOperation手动操作,AutoRun连续执行,ViewData查看数据,ConfirmAlarm确认报警,_permission};}密码操作合并publicstaticclassPasswordHelper{/// summary/// 生成随机盐值/// /summarypublicstaticstringGenerateSalt(){byte[]saltBytesnewbyte[16];using(varrngRandomNumberGenerator.Create()){rng.GetBytes(saltBytes);}returnConvert.ToBase64String(saltBytes);}/// summary/// 哈希密码/// /summarypublicstaticstringHashPassword(stringpassword,stringsalt){using(varsha256SHA256.Create()){varsaltedPasswordpasswordsalt;byte[]bytessha256.ComputeHash(Encoding.UTF8.GetBytes(saltedPassword));returnConvert.ToBase64String(bytes);}}/// summary/// 验证密码/// /summarypublicstaticboolVerifyPassword(stringpassword,stringstoredHash,stringsalt){varhashHashPassword(password,salt);returnhashstoredHash;}}密码 参考值与 salt 生成的方法varsaltPasswordHelper.GenerateSalt();NewUsernewUser{Usernameusername,PasswordHashPasswordHelper.HashPassword(password,salt),Saltsalt,Rolerole,RealNamerealName,Emailemail,CreatedAtDateTime.Now,IsActiveisActive,SyncStatus1};验证密码privatevoidbtnOK_Click(object?sender,EventArgse){// 修改密码模式验证旧密码if(!_isResetMode){stringoldPasswordtxtOldPassword.Text;if(string.IsNullOrEmpty(oldPassword)){MessageBox.Show(请输入原密码,提示,MessageBoxButtons.OK,MessageBoxIcon.Warning);txtOldPassword.Focus();return;}if(!PasswordHelper.VerifyPassword(oldPassword,_user.PasswordHash,_user.Salt)){MessageBox.Show(原密码错误,验证失败,MessageBoxButtons.OK,MessageBoxIcon.Warning);txtOldPassword.Focus();return;}}stringnewPasswordtxtNewPassword.Text;stringconfirmPasswordtxtConfirmPassword.Text;if(string.IsNullOrEmpty(newPassword)){MessageBox.Show(请输入新密码,提示,MessageBoxButtons.OK,MessageBoxIcon.Warning);txtNewPassword.Focus();return;}if(newPassword.Length6){MessageBox.Show(密码长度至少6位,提示,MessageBoxButtons.OK,MessageBoxIcon.Warning);txtNewPassword.Focus();return;}if(newPassword!confirmPassword){MessageBox.Show(两次输入的密码不一致,提示,MessageBoxButtons.OK,MessageBoxIcon.Warning);txtConfirmPassword.Focus();return;}_newPasswordnewPassword;DialogResultDialogResult.OK;Close();}