diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HmacSha256Util.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HmacSha256Util.cs
new file mode 100644
index 00000000..89064155
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HmacSha256Util.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities
+{
+ ///
+ /// HMAC-SHA-1 算法工具类。
+ ///
+ public static class HmacSha256Util
+ {
+ ///
+ /// 获取信息摘要。
+ ///
+ /// 密钥字节数组。
+ /// 信息字节数组。
+ /// 信息摘要。
+ public static string Hash(byte[] secretBytes, byte[] bytes)
+ {
+ if (secretBytes == null) throw new ArgumentNullException(nameof(secretBytes));
+ if (bytes == null) throw new ArgumentNullException(nameof(bytes));
+
+ using HMAC hmac = new HMACSHA256(secretBytes);
+ byte[] hashBytes = hmac.ComputeHash(bytes);
+ return BitConverter.ToString(hashBytes).Replace("-", "");
+ }
+
+ ///
+ /// 获取信息摘要。
+ ///
+ /// 密钥。
+ /// 文本信息。
+ /// 信息摘要。
+ public static string Hash(string secret, string message)
+ {
+ if (secret == null) throw new ArgumentNullException(nameof(secret));
+ if (message == null) throw new ArgumentNullException(nameof(message));
+
+ byte[] secretBytes = Encoding.UTF8.GetBytes(secret);
+ byte[] bytes = Encoding.UTF8.GetBytes(message);
+ return Hash(secretBytes, bytes);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/Sha1Util.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/Sha1Util.cs
new file mode 100644
index 00000000..b8385dac
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/Sha1Util.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities
+{
+ ///
+ /// SHA-1 算法工具类。
+ ///
+ public static class Sha1Util
+ {
+ ///
+ /// 获取信息摘要。
+ ///
+ /// 信息字节数组。
+ /// 信息摘要。
+ public static string Hash(byte[] bytes)
+ {
+ if (bytes == null) throw new ArgumentNullException(nameof(bytes));
+
+ using SHA1 sha = SHA1.Create();
+ byte[] hashBytes = sha.ComputeHash(bytes);
+ return BitConverter.ToString(hashBytes).Replace("-", "");
+ }
+
+ ///
+ /// 获取信息摘要。
+ ///
+ /// 文本信息。
+ /// 信息摘要。
+ public static string Hash(string message)
+ {
+ if (message == null) throw new ArgumentNullException(nameof(message));
+
+ byte[] bytes = Encoding.UTF8.GetBytes(message);
+ return Hash(bytes);
+ }
+ }
+}