From a004304061c926a1d916f176b75f7a7ae795e211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Sat, 9 Aug 2025 17:15:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=85=91=E6=8D=A2=E7=A0=81?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=90=8E=E4=B8=8D=E5=86=8D=E5=BC=B9=E5=87=BA?= =?UTF-8?q?=E6=AD=A4=E5=89=AA=E5=88=87=E6=9D=BF=E5=86=85=E5=AE=B9=E7=9A=84?= =?UTF-8?q?=E5=85=91=E6=8D=A2=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UseRedeemCode/RedeemCodeManager.cs | 14 ++++++++ .../Helpers/Security/MD5Helper.cs | 35 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 BetterGenshinImpact/Helpers/Security/MD5Helper.cs diff --git a/BetterGenshinImpact/GameTask/UseRedeemCode/RedeemCodeManager.cs b/BetterGenshinImpact/GameTask/UseRedeemCode/RedeemCodeManager.cs index 6a43e593..4dadade8 100644 --- a/BetterGenshinImpact/GameTask/UseRedeemCode/RedeemCodeManager.cs +++ b/BetterGenshinImpact/GameTask/UseRedeemCode/RedeemCodeManager.cs @@ -4,6 +4,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; +using BetterGenshinImpact.Helpers.Security; using BetterGenshinImpact.View.Windows; using TextBox = Wpf.Ui.Controls.TextBox; @@ -11,8 +12,16 @@ namespace BetterGenshinImpact.GameTask.UseRedeemCode; public class RedeemCodeManager { + public static HashSet CancelClipboardHash { get; } = []; + public static async Task ImportFromClipboard(string clipboardText) { + var md5Hash = MD5Helper.ComputeMD5(clipboardText); + if (CancelClipboardHash.Contains(md5Hash)) + { + return; + } + var codes = ExtractAllCodes(clipboardText); if (codes.Count == 0) { @@ -36,6 +45,11 @@ public class RedeemCodeManager if (p.DialogResult != true) { + if (CancelClipboardHash.Count > 10) + { + CancelClipboardHash.Clear(); + } + CancelClipboardHash.Add(md5Hash); return; } diff --git a/BetterGenshinImpact/Helpers/Security/MD5Helper.cs b/BetterGenshinImpact/Helpers/Security/MD5Helper.cs new file mode 100644 index 00000000..732d2e8f --- /dev/null +++ b/BetterGenshinImpact/Helpers/Security/MD5Helper.cs @@ -0,0 +1,35 @@ +using System.Security.Cryptography; +using System.Text; + +namespace BetterGenshinImpact.Helpers.Security; + +public static class MD5Helper +{ + /// + /// 计算字符串的MD5哈希值 + /// + /// 输入字符串 + /// 字符编码,默认为UTF-8 + /// 32位小写MD5哈希值 + public static string ComputeMD5(string input, Encoding encoding = null) + { + if (string.IsNullOrEmpty(input)) + return string.Empty; + + encoding = encoding ?? Encoding.UTF8; + + using (var md5 = MD5.Create()) + { + byte[] inputBytes = encoding.GetBytes(input); + byte[] hashBytes = md5.ComputeHash(inputBytes); + + // 将字节数组转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < hashBytes.Length; i++) + { + sb.Append(hashBytes[i].ToString("x2")); + } + return sb.ToString(); + } + } +} \ No newline at end of file