From f1dac41c7fb8e9aace682673af3bbe7c573f8526 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Mon, 16 Dec 2024 15:23:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Helper/IRCEmailPasswordHelper.cs | 77 +++++++++++++++++++ .../Service/Management/UserService.cs | 3 +- 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 IRaCIS.Core.Application/Helper/IRCEmailPasswordHelper.cs diff --git a/IRaCIS.Core.Application/Helper/IRCEmailPasswordHelper.cs b/IRaCIS.Core.Application/Helper/IRCEmailPasswordHelper.cs new file mode 100644 index 0000000..efb9ad4 --- /dev/null +++ b/IRaCIS.Core.Application/Helper/IRCEmailPasswordHelper.cs @@ -0,0 +1,77 @@ +namespace IRaCIS.Core.Application.Helper; + +public static class IRCEmailPasswordHelper +{ + private static readonly Random Random = new Random(); + + //显示位数:3分之2的位数,向上取整 + //取哪几个个值:最后一位和前面几位 + //其他:3个***。 + //比如:hlj23@126.com + //为:hlj***3@126.com + + //he@126.com + //为:h*** e@126.com + + public static string MaskEmail(string email) + { + + // 找到 "@" 符号的位置 + int atIndex = email.IndexOf('@'); + + string visiblePartBefore = email.Substring(0, atIndex); + + string afterAt = email.Substring(atIndex + 1); + + int visibleLength = (int)Math.Ceiling((double)visiblePartBefore.Length * 2 / 3); + + // 替换中间两位字符为星号 + string hiddenPartBeforeAt = visiblePartBefore.Substring(0, visibleLength - 1) + "***" + visiblePartBefore.Last(); + + + // 组合隐藏和可见部分 + string hiddenEmail = hiddenPartBeforeAt + "@" + afterAt; + + return hiddenEmail; + } + + /// + /// 密码必须包含:1)8 – 32 个字符;2)至少1个数字;3) 至少1个大写字母;4)至少1个小写字母;5)至少1个特殊字符 (~!-@#$%^&*_+?) + /// + /// + public static string GenerateRandomPassword(int length) + { + // 必须包含的字符组 + const string numbers = "0123456789"; + const string upperCaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + const string lowerCaseLetters = "abcdefghijklmnopqrstuvwxyz"; + const string specialCharacters = "~!-@#$%^&*_+?"; + + // 随机选择至少一个字符 + char[] requiredCharacters = + { + numbers[Random.Next(numbers.Length)], + upperCaseLetters[Random.Next(upperCaseLetters.Length)], + lowerCaseLetters[Random.Next(lowerCaseLetters.Length)], + specialCharacters[Random.Next(specialCharacters.Length)] + }; + + // 构建剩余的字符集,用于填充密码的其余部分 + string allCharacters = numbers + upperCaseLetters + lowerCaseLetters + specialCharacters; + + // 确保密码长度满足用户要求 + char[] password = new char[length]; + + // 将必须包含的字符放入密码中 + requiredCharacters.CopyTo(password, 0); + + // 填充剩余的字符 + for (int i = requiredCharacters.Length; i < length; i++) + { + password[i] = allCharacters[Random.Next(allCharacters.Length)]; + } + + // 随机打乱密码字符顺序 + return new string(password.OrderBy(_ => Random.Next()).ToArray()); + } +} diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index c9f9573..f0784d2 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Options; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; using static IRaCIS.Core.Domain.Share.StaticData; +using IRaCIS.Core.Application.Helper; namespace IRaCIS.Application.Services { @@ -272,7 +273,7 @@ namespace IRaCIS.Application.Services if (_hostEnvironment.EnvironmentName != "Development") { - pwd = string.Empty + new Random().Next(100000, 1000000)+ new Random().Next(100000, 1000000); + pwd = IRCEmailPasswordHelper.GenerateRandomPassword(10); }