From 5a23d6f1458aba47efd6ccd3bf4204b785d145a4 Mon Sep 17 00:00:00 2001
From: NoahLan <6995syu@163.com>
Date: Tue, 27 Feb 2024 11:33:17 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20BCrypt=E5=8A=A0=E5=AF=86=E6=96=B9?=
 =?UTF-8?q?=E6=B3=95=E6=B7=BB=E5=8A=A0Salt=E7=94=9F=E6=88=90=E5=92=8C?=
 =?UTF-8?q?=E6=A3=80=E6=9F=A5=E9=80=BB=E8=BE=91=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 .../Crypt/BCrypt/BCrypt.cs                    | 28 ++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/framework/NPin.Framework.Core/Crypt/BCrypt/BCrypt.cs b/framework/NPin.Framework.Core/Crypt/BCrypt/BCrypt.cs
index ac6e9f6..9b682bc 100644
--- a/framework/NPin.Framework.Core/Crypt/BCrypt/BCrypt.cs
+++ b/framework/NPin.Framework.Core/Crypt/BCrypt/BCrypt.cs
@@ -1,4 +1,5 @@
-using System.Text;
+using System.Security.Cryptography;
+using System.Text;
 
 namespace NPin.Framework.Core.Crypt.BCrypt;
 
@@ -11,4 +12,29 @@ public static class BCrypt
 
         return Org.BouncyCastle.Crypto.Generators.BCrypt.Generate(passBytes, saltBytes, cost);
     }
+
+    public static string GenerateSalt()
+    {
+        var buf = new byte[16];
+        using var rand = RandomNumberGenerator.Create();
+        rand.GetBytes(buf);
+
+        return Convert.ToBase64String(buf);
+    }
+
+    /// 
+    /// 检查密码是否正确
+    /// 通过再次生成一次密码匹配
+    /// 
+    /// 
+    /// 
+    /// 
+    /// 
+    /// 
+    public static bool Check(string encrypt, string password, string salt, int cost)
+    {
+        var passStr = Generate(password, salt, cost).ToString();
+
+        return string.Equals(encrypt, passStr);
+    }
 }
\ No newline at end of file