C#哈希加密:原理、實現與應用

C#哈希加密:原理、實現與應用

在當今數字化時代,數據安全是每個應用程序都必須重視的問題。哈希加密作為一種重要的加密技術,在密碼存儲、數據完整性驗證、數字簽名等領域發揮著關鍵作用。本文將深入探討C#中哈希加密的原理、常用算法以及實際應用,并通過代碼示例展示如何在C#中實現哈希加密。

一、哈希加密基礎

哈希加密(也稱為哈希函數或散列函數)是一種將任意長度的輸入數據轉換為固定長度輸出的算法。這個固定長度的輸出通常稱為哈希值、散列值或消息摘要。哈希加密的主要特點和用途包括:

  1. 確定性:相同的輸入總是產生相同的輸出。
  2. 單向性:從哈希值無法推導出原始輸入數據。
  3. 雪崩效應:輸入數據的微小變化會導致輸出的哈希值發生巨大變化。
  4. 固定長度:無論輸入數據的長度如何,哈希值的長度總是固定的。
  5. 抗碰撞性:理想情況下,不同的輸入應該產生不同的輸出,但實際上很難完全避免碰撞(即兩個不同的輸入產生相同的哈希值)。

哈希加密的主要應用場景包括:

  • 密碼存儲:不直接存儲用戶密碼,而是存儲密碼的哈希值,驗證時比較輸入密碼的哈希值與存儲的哈希值是否一致。
  • 數據完整性驗證:通過比較數據的哈希值來驗證數據是否被篡改。
  • 數字簽名:在數字簽名中,通常先對數據進行哈希處理,然后對哈希值進行簽名,以提高效率。
  • 文件校驗:通過比較文件的哈希值來驗證文件的完整性和一致性。
  • 數據庫索引:在數據庫中,哈希值可以用于創建索引,提高查詢效率。

在C#中,哈希加密算法主要通過System.Security.Cryptography命名空間下的類來實現。所有哈希算法的基類是HashAlgorithm,它定義了哈希算法的基本屬性和方法。

二、常用哈希算法介紹

1. MD5

MD5 (Message-Digest Algorithm 5) 是由Ronald Rivest于1992年開發的一種哈希算法,它產生128位(16字節)的哈希值。MD5曾經被廣泛使用,但現在已被認為不安全,因為已經發現了有效的碰撞攻擊方法。

MD5的特點:
  • 輸出長度:128位(16字節)
  • 速度:較快
  • 安全性:低(已被破解,存在碰撞風險)
  • 應用:歷史上廣泛用于數據完整性驗證,但現在不推薦用于安全敏感場景
MD5代碼示例:
using System;
using System.Security.Cryptography;
using System.Text;public class MD5Example
{public static string CalculateMD5Hash(string input){// 創建MD5實例using (MD5 md5 = MD5.Create()){// 將輸入字符串轉換為字節數組并計算哈希值byte[] inputBytes = Encoding.UTF8.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();}}public static void Main(){string input = "這是一段需要計算MD5哈希值的文本";string md5Hash = CalculateMD5Hash(input);Console.WriteLine("MD5哈希值: " + md5Hash);}
}

2. SHA-1

SHA-1 (Secure Hash Algorithm 1) 是由美國國家安全局 (NSA) 開發的一種哈希算法,它產生160位(20字節)的哈希值。SHA-1曾經被廣泛使用,但現在已被認為不安全,因為已經發現了有效的碰撞攻擊方法。

SHA-1的特點:
  • 輸出長度:160位(20字節)
  • 速度:中等
  • 安全性:低(已被破解,存在碰撞風險)
  • 應用:歷史上廣泛用于數據完整性驗證,但現在不推薦用于安全敏感場景
SHA-1代碼示例:
using System;
using System.Security.Cryptography;
using System.Text;public class SHA1Example
{public static string CalculateSHA1Hash(string input){// 創建SHA1實例using (SHA1 sha1 = SHA1.Create()){// 將輸入字符串轉換為字節數組并計算哈希值byte[] inputBytes = Encoding.UTF8.GetBytes(input);byte[] hashBytes = sha1.ComputeHash(inputBytes);// 將字節數組轉換為十六進制字符串StringBuilder sb = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){sb.Append(hashBytes[i].ToString("x2"));}return sb.ToString();}}public static void Main(){string input = "這是一段需要計算SHA-1哈希值的文本";string sha1Hash = CalculateSHA1Hash(input);Console.WriteLine("SHA-1哈希值: " + sha1Hash);}
}

3. SHA-256

SHA-256是SHA-2系列哈希算法的一部分,它產生256位(32字節)的哈希值。SHA-2系列包括SHA-224、SHA-256、SHA-384和SHA-512等算法,目前被認為是安全的,沒有發現有效的碰撞攻擊方法。

SHA-256的特點:
  • 輸出長度:256位(32字節)
  • 速度:中等
  • 安全性:高(目前沒有發現有效的碰撞攻擊方法)
  • 應用:廣泛用于各種安全場景,如密碼存儲、數字簽名等
SHA-256代碼示例:
using System;
using System.Security.Cryptography;
using System.Text;public class SHA256Example
{public static string CalculateSHA256Hash(string input){// 創建SHA256實例using (SHA256 sha256 = SHA256.Create()){// 將輸入字符串轉換為字節數組并計算哈希值byte[] inputBytes = Encoding.UTF8.GetBytes(input);byte[] hashBytes = sha256.ComputeHash(inputBytes);// 將字節數組轉換為十六進制字符串StringBuilder sb = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){sb.Append(hashBytes[i].ToString("x2"));}return sb.ToString();}}public static void Main(){string input = "這是一段需要計算SHA-256哈希值的文本";string sha256Hash = CalculateSHA256Hash(input);Console.WriteLine("SHA-256哈希值: " + sha256Hash);}
}

4. SHA-512

SHA-512是SHA-2系列哈希算法的一部分,它產生512位(64字節)的哈希值。SHA-512提供了更高的安全性,但計算成本也更高。

SHA-512的特點:
  • 輸出長度:512位(64字節)
  • 速度:較慢
  • 安全性:非常高(目前沒有發現有效的碰撞攻擊方法)
  • 應用:用于對安全性要求極高的場景,如金融交易、數字簽名等
SHA-512代碼示例:
using System;
using System.Security.Cryptography;
using System.Text;public class SHA512Example
{public static string CalculateSHA512Hash(string input){// 創建SHA512實例using (SHA512 sha512 = SHA512.Create()){// 將輸入字符串轉換為字節數組并計算哈希值byte[] inputBytes = Encoding.UTF8.GetBytes(input);byte[] hashBytes = sha512.ComputeHash(inputBytes);// 將字節數組轉換為十六進制字符串StringBuilder sb = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){sb.Append(hashBytes[i].ToString("x2"));}return sb.ToString();}}public static void Main(){string input = "這是一段需要計算SHA-512哈希值的文本";string sha512Hash = CalculateSHA512Hash(input);Console.WriteLine("SHA-512哈希值: " + sha512Hash);}
}

5. HMAC

HMAC (Hash-based Message Authentication Code) 是一種使用哈希函數和密鑰來驗證消息完整性和真實性的機制。HMAC通過將密鑰與消息結合,然后應用哈希函數來生成認證碼。

HMAC的特點:
  • 基于哈希函數:可以使用MD5、SHA-1、SHA-256等哈希函數
  • 密鑰依賴性:生成的認證碼依賴于密鑰和消息
  • 安全性:提供消息完整性驗證和認證功能
  • 應用:廣泛用于API認證、消息認證等場景
HMAC-SHA256代碼示例:
using System;
using System.Security.Cryptography;
using System.Text;public class HMACExample
{public static string CalculateHMACSHA256(string input, string key){// 將密鑰轉換為字節數組byte[] keyBytes = Encoding.UTF8.GetBytes(key);// 創建HMACSHA256實例using (HMACSHA256 hmac = new HMACSHA256(keyBytes)){// 將輸入字符串轉換為字節數組并計算HMAC值byte[] inputBytes = Encoding.UTF8.GetBytes(input);byte[] hashBytes = hmac.ComputeHash(inputBytes);// 將字節數組轉換為十六進制字符串StringBuilder sb = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){sb.Append(hashBytes[i].ToString("x2"));}return sb.ToString();}}public static void Main(){string input = "這是一段需要計算HMAC-SHA256的文本";string key = "mysecretkey123"; // 密鑰string hmacHash = CalculateHMACSHA256(input, key);Console.WriteLine("HMAC-SHA256哈希值: " + hmacHash);}
}

6. PBKDF2

PBKDF2 (Password-Based Key Derivation Function 2) 是一種基于密碼的密鑰派生函數,它通過多次應用哈希函數來增加破解密碼的難度。PBKDF2通常用于密碼存儲,它的安全性主要依賴于迭代次數和鹽值的隨機性。

PBKDF2的特點:
  • 慢速哈希:通過多次迭代增加計算成本,抵御暴力破解
  • 鹽值:使用隨機鹽值,防止彩虹表攻擊
  • 可配置性:可以調整迭代次數和輸出密鑰長度
  • 安全性:高(目前被認為是安全的密碼存儲方法)
  • 應用:密碼存儲、密鑰派生等
PBKDF2代碼示例:
using System;
using System.Security.Cryptography;
using System.Text;public class PBKDF2Example
{public static string HashPassword(string password, byte[] salt, int iterations, int keySize){// 創建Rfc2898DeriveBytes實例(PBKDF2的實現)using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, salt, iterations)){// 派生密鑰byte[] key = pbkdf2.GetBytes(keySize);// 將鹽值和派生密鑰組合成一個字節數組byte[] hashBytes = new byte[salt.Length + key.Length];Array.Copy(salt, 0, hashBytes, 0, salt.Length);Array.Copy(key, 0, hashBytes, salt.Length, key.Length);// 將字節數組轉換為Base64字符串return Convert.ToBase64String(hashBytes);}}public static bool VerifyPassword(string password, string hashedPassword, int iterations, int keySize){// 將Base64字符串轉換為字節數組byte[] hashBytes = Convert.FromBase64String(hashedPassword);// 提取鹽值byte[] salt = new byte[16]; // 假設鹽值長度為16字節Array.Copy(hashBytes, 0, salt, 0, salt.Length);// 提取原始哈希值byte[] originalHash = new byte[keySize];Array.Copy(hashBytes, salt.Length, originalHash, 0, keySize);// 使用相同的鹽值和迭代次數對輸入密碼進行哈希using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, salt, iterations)){byte[] hash = pbkdf2.GetBytes(keySize);// 比較兩個哈希值是否相同for (int i = 0; i < hash.Length; i++){if (hash[i] != originalHash[i])return false;}}return true;}public static void Main(){string password = "MySecurePassword123!";// 生成隨機鹽值byte[] salt = new byte[16];using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()){rng.GetBytes(salt);}// 哈希密碼string hashedPassword = HashPassword(password, salt, 10000, 32);Console.WriteLine("哈希后的密碼: " + hashedPassword);// 驗證密碼bool isPasswordCorrect = VerifyPassword(password, hashedPassword, 10000, 32);Console.WriteLine("密碼驗證結果: " + (isPasswordCorrect ? "正確" : "錯誤"));// 驗證錯誤密碼bool isWrongPasswordCorrect = VerifyPassword("WrongPassword", hashedPassword, 10000, 32);Console.WriteLine("錯誤密碼驗證結果: " + (isWrongPasswordCorrect ? "正確" : "錯誤"));}
}

三、哈希算法比較

算法輸出長度安全性速度適用場景
MD5128位非安全敏感場景,如文件校驗
SHA-1160位非安全敏感場景,如版本控制系統
SHA-256256位安全敏感場景,如密碼存儲、數字簽名
SHA-512512位非常高對安全性要求極高的場景
HMAC取決于基礎哈希函數消息認證、API認證
PBKDF2可配置密碼存儲

從上述比較可以看出,MD5和SHA-1由于安全性問題,已不推薦用于安全敏感場景。SHA-256和SHA-512提供了更高的安全性,是現代應用的首選。HMAC和PBKDF2則針對特定應用場景進行了優化,分別用于消息認證和密碼存儲。

四、哈希加密最佳實踐

在使用C#哈希加密算法時,以下是一些最佳實踐建議:

  1. 避免使用不安全的算法:不要使用MD5和SHA-1等已被破解的算法,除非是在非安全敏感場景下。

  2. 使用足夠安全的算法:對于安全敏感場景,應使用SHA-256或更高強度的算法。

  3. 為密碼添加鹽值:在存儲密碼時,一定要使用隨機鹽值,防止彩虹表攻擊。

  4. 使用慢速哈希函數:對于密碼存儲,應使用PBKDF2、bcrypt或scrypt等慢速哈希函數,增加暴力破解的難度。

  5. 調整迭代次數:在使用PBKDF2等算法時,應根據系統性能和安全需求,合理調整迭代次數。

  6. 妥善管理密鑰:在使用HMAC等需要密鑰的算法時,應妥善管理密鑰的生成、存儲和傳輸。

  7. 考慮使用密鑰派生函數:在需要從密碼派生密鑰的場景中,應使用專門的密鑰派生函數,如PBKDF2或Rfc2898DeriveBytes。

  8. 定期更新哈希算法:隨著密碼分析技術的發展,應定期評估和更新所使用的哈希算法。

五、哈希加密在實際應用中的示例

1. 密碼存儲

密碼存儲是哈希加密最常見的應用場景之一。以下是一個使用PBKDF2進行密碼存儲的完整示例:

using System;
using System.Security.Cryptography;
using System.Text;public class PasswordStorage
{// 鹽值長度(字節)private const int SaltSize = 16;// 派生密鑰長度(字節)private const int KeySize = 32;// 迭代次數private const int Iterations = 10000;// 哈希算法名稱private const string Algorithm = "PBKDF2";// 生成密碼哈希public static string HashPassword(string password){// 生成隨機鹽值byte[] salt;new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);// 創建Rfc2898DeriveBytes實例(PBKDF2的實現)var pbkdf2 = new Rfc2898DeriveBytes(password, salt, Iterations);// 派生密鑰byte[] hash = pbkdf2.GetBytes(KeySize);// 將鹽值和派生密鑰組合成一個字節數組byte[] hashBytes = new byte[SaltSize + KeySize];Array.Copy(salt, 0, hashBytes, 0, SaltSize);Array.Copy(hash, 0, hashBytes, SaltSize, KeySize);// 將字節數組轉換為Base64字符串string base64Hash = Convert.ToBase64String(hashBytes);// 格式化為可讀字符串,包含算法名稱、迭代次數和Base64編碼的哈希值return string.Format($"${Algorithm}${Iterations}${base64Hash}");}// 驗證密碼public static bool VerifyPassword(string password, string hashedPassword){try{// 解析哈希字符串string[] parts = hashedPassword.Split('$');if (parts.Length != 4){return false; // 格式不正確}// 檢查算法名稱if (parts[1] != Algorithm){return false; // 不支持的算法}// 獲取迭代次數int iterations = Convert.ToInt32(parts[2]);// 將Base64字符串轉換為字節數組byte[] hashBytes = Convert.FromBase64String(parts[3]);// 提取鹽值byte[] salt = new byte[SaltSize];Array.Copy(hashBytes, 0, salt, 0, SaltSize);// 提取原始哈希值byte[] hash = new byte[KeySize];Array.Copy(hashBytes, SaltSize, hash, 0, KeySize);// 使用相同的鹽值和迭代次數對輸入密碼進行哈希var pbkdf2 = new Rfc2898DeriveBytes(password, salt, iterations);byte[] testHash = pbkdf2.GetBytes(KeySize);// 比較兩個哈希值是否相同for (int i = 0; i < KeySize; i++){if (hash[i] != testHash[i])return false;}return true;}catch{return false; // 處理任何異常,返回驗證失敗}}public static void Main(){string password = "MySecurePassword123!";// 哈希密碼string hashedPassword = HashPassword(password);Console.WriteLine("哈希后的密碼: " + hashedPassword);// 驗證密碼bool isPasswordCorrect = VerifyPassword(password, hashedPassword);Console.WriteLine("密碼驗證結果: " + (isPasswordCorrect ? "正確" : "錯誤"));// 驗證錯誤密碼bool isWrongPasswordCorrect = VerifyPassword("WrongPassword", hashedPassword);Console.WriteLine("錯誤密碼驗證結果: " + (isWrongPasswordCorrect ? "正確" : "錯誤"));}
}

2. 文件完整性驗證

哈希加密可以用于驗證文件是否被篡改。以下是一個驗證文件SHA-256哈希值的示例:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;public class FileIntegrityChecker
{public static string CalculateFileSHA256(string filePath){// 檢查文件是否存在if (!File.Exists(filePath)){throw new FileNotFoundException("文件不存在", filePath);}// 創建SHA256實例using (SHA256 sha256 = SHA256.Create()){// 打開文件流using (FileStream fileStream = File.OpenRead(filePath)){// 計算文件的哈希值byte[] hashBytes = sha256.ComputeHash(fileStream);// 將字節數組轉換為十六進制字符串StringBuilder sb = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){sb.Append(hashBytes[i].ToString("x2"));}return sb.ToString();}}}public static bool VerifyFileSHA256(string filePath, string expectedHash){try{// 計算文件的實際哈希值string actualHash = CalculateFileSHA256(filePath);// 比較實際哈希值與期望哈希值return actualHash.Equals(expectedHash, StringComparison.OrdinalIgnoreCase);}catch{return false; // 處理任何異常,返回驗證失敗}}public static void Main(){string filePath = "example.txt";string expectedHash = "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422abaf56530643";try{// 驗證文件哈希值bool isFileValid = VerifyFileSHA256(filePath, expectedHash);if (isFileValid){Console.WriteLine("文件完整性驗證通過");}else{Console.WriteLine("文件完整性驗證失敗");Console.WriteLine("實際哈希值: " + CalculateFileSHA256(filePath));Console.WriteLine("期望哈希值: " + expectedHash);}}catch (Exception ex){Console.WriteLine("驗證過程中發生錯誤: " + ex.Message);}}
}

六、總結

本文詳細介紹了C#中常用的哈希加密算法,包括MD5、SHA-1、SHA-256、SHA-512、HMAC和PBKDF2,并通過代碼示例展示了它們的使用方法。哈希加密在數據安全中扮演著重要角色,特別是在密碼存儲、數據完整性驗證和數字簽名等場景中。

在選擇哈希算法時,應根據具體需求考慮安全性、性能和兼容性等因素。在現代應用中,SHA-256和SHA-512由于其較高的安全性,是首選的哈希算法。對于密碼存儲,應使用PBKDF2等專門設計的密碼哈希函數,并確保使用隨機鹽值和足夠的迭代次數。

希望本文能夠幫助你理解C#中哈希加密的基本原理和使用方法,并在實際應用中選擇合適的哈希算法來保護你的數據安全。如果你有任何問題或建議,歡迎在評論區留言討論。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88814.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88814.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88814.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

httpbin.org是什么,有什么作用

httpbin.org 是一個開源的 HTTP 請求與響應測試服務&#xff0c;基于 Python 的 Flask 框架開發 它允許開發者發送各種 HTTP 請求&#xff0c;并返回請求的詳細信息&#xff0c;便于調試和驗證 HTTP 客戶端的行為。以下是其核心功能和作用詳解&#xff1a; 一、核心功能與作用…

mongodb生產備份工具PBM

如果你的 MongoDB 數據量特別大&#xff08;例如幾十 GB、TB 級別&#xff09;&#xff0c;普通的 mongodump/mongorestore 會顯得緩慢且資源消耗大&#xff0c;不適合生產級別大數據集。下面是當前 MongoDB 社區和企業廣泛使用的幾種備份方案對比和推薦&#xff1a; 工具是否…

【LeetCode#第167題】兩數之和Ⅱ

給你一個下標從 1 開始的整數數組 numbers &#xff0c;該數組已按 非遞減順序排列 &#xff0c;請你從數組中找出滿足相加之和等于目標數 target 的兩個數。如果設這兩個數分別是 numbers[index1] 和 numbers[index2] &#xff0c;則 1 < index1 < index2 < numbers…

Python(一)實現一個爬取微信小程序數據的爬蟲+工程化初步實踐

文章目錄 前言用Charles 抓包 iOS 微信小程序在Mac端和iOS端安裝Charles 自簽名證書Mac端iOS端 能抓到Safari瀏覽器的包但是抓不到微信小程序的包直接在iOS 上抓包的App如何抓取Android 7.0 以上/Harmony OS微信小程序包 Python 項目工程化pip 切換為國內鏡像源工程化參考腳手架…

uview ui request get / post 傳參含params和json數據的分析和使用

背景。單獨寫了controller方法去配合移動端的接口調用。但有的接口與pc端類似。于是進行了復用。但接口得復制不是。 uview js request 文檔 注意迪三個參數是header 后端接口GET方法 調用代碼截圖 瀏覽器調試 總結。 復制之前的api接口。為了方便復用底層實現。接口類型…

用 pnpm + TurboRepo,構建多項目高效開發體系

在現代前端項目日益復雜的今天&#xff0c;我們越來越多地面對一個場景&#xff1a;多個項目共享邏輯、組件和依賴&#xff0c;而維護和構建效率卻在不斷拉垮。這種情況下&#xff0c;傳統項目結構的痛點就顯現無遺。 從我親身實踐來看&#xff0c;選擇 pnpm TurboRepo 構建 …

Pytest 使用命令行參數執行指定環境的腳本—— Python 實踐

&#x1f9fe; 一、項目背景 在自動化測試中&#xff0c;我們經常需要根據不同的運行環境&#xff08;如測試環境和生產環境&#xff09;來執行測試腳本。本文將詳細介紹如何通過命令行參數來指定運行環境&#xff0c;并使用 Python 和 pytest 框架實現這一功能。 &#x1f6e…

利用可控驗證碼位數實現拒絕服務攻擊(DoS)風險與線程模型分析

一、背景介紹&#xff1a;驗證碼接口中的潛在 DoS 漏洞 在滲透測試過程中&#xff0c;常見驗證碼接口支持傳入“驗證碼位數”參數&#xff0c;表面看是業務可配置&#xff0c;實則若未做上限控制&#xff0c;極易成為資源消耗型 DoS 攻擊入口。 &#x1f9ea; 測試場景&#…

Spring Cloud Feign 整合 Sentinel 實現服務降級與熔斷保護

Spring Cloud Feign 整合 Sentinel 實現服務降級與熔斷保護 在微服務架構中&#xff0c;服務之間的調用往往依賴 Feign&#xff0c;而服務調用的穩定性又至關重要。本文將介紹如何將 Feign 與 Sentinel 結合使用&#xff0c;實現服務的容錯保護&#xff08;如降級與熔斷&#…

寵物醫院系統的設計與實現(springBoot版)

一、開題報告 一、本選題研究的意義和背景&#xff08;理論與現實意義&#xff09;&#xff1a; 背景&#xff1a;隨著人們生活水平的提高&#xff0c;寵物飼養愈發普遍&#xff0c;寵物醫院的需求也日益增長。掛號方式主要依賴現場掛號&#xff0c;導致寵物主人需要長時間排隊…

SOCKSv5 協議通信的完整階段與報文格式詳解

SOCKSv5 協議的通信通常分為以下幾個主要階段&#xff1a; 方法協商階段 (Method Negotiation)方法依賴的子協商階段 (Method-Dependent Sub-negotiation) - 本例為用戶名/密碼認證請求發送階段 (Request Sending)請求回復階段 (Request Reply)數據傳輸階段 (Data Transfer) …

??Git提交代碼Commit消息企業級規范

??Git Commit 類型完整指南?? 類型用途示例??feat??新增功能&#xff08;面向用戶的功能性變更&#xff09;git commit -m "feat: 添加用戶登錄功能"??fix??修復 Bug&#xff08;解決代碼中的問題&#xff09;git commit -m "fix: 修復首頁加載崩潰…

TiDB AUTO_RANDOM 超大主鍵前端精度丟失排查:JavaScript Number 限制與解決方案

前端長整型主鍵“失蹤”記 ——一次 ArrayIndexOutOfBoundsException 的排查全過程 一、事故現場 最近在維護 SMS-OFFICE 后臺系統時&#xff0c;運維同事反饋&#xff1a; 點擊「短信詳情」或「郵箱賬號詳情」時&#xff0c;偶爾彈窗空白、日志報錯&#xff1a; java.lang.A…

在postgresql使用mybatis動態創建數據庫分區表

在postgresql使用mybatis動態創建數據庫分區表 1. 整體描述2. 前期準備2.1 創建主表語句2.2 創建分表語句2.3 xxl-job 3. 代碼實現3.1 mapper.xml層3.2 mapper.java層3.3 service接口層3.4 service實現層3.5 controller層 4. 總結 1. 整體描述 在java下實現&#xff1a;創建分…

Python網安-zip文件暴力破解

目錄 源碼在這里 需要的模塊 準備一個密碼本和需要破解的ZIP文件 一行一行地從密碼文件中讀取每個密碼。 核心部分 注意&#xff0c;需要修改上段代碼注釋里的這段具有編碼問題的代碼&#xff1a; 源碼在這里 https://github.com/Wist-fully/Attack/tree/cracker 需要的…

聊聊Golang開發工程師

誕生背景 Go由Google三位頂尖工程師&#xff08;Ken Thompson、Rob Pike、Robert Griesemer&#xff09;設計&#xff0c;目標是解決兩大行業痛點&#xff1a; 硬件利用率不足&#xff1a;多核CPU普及&#xff0c;但C/C等語言難以高效利用并發能力&#xff1b; 開發效率低下&a…

機器學習6——線性分類函數

線性分類函數 分類問題的兩種決策方法&#xff1a; 概率方法&#xff1a;通過計算后驗概率進行分類。優點是在概率分布已知的情況下可以得到最優解&#xff0c;缺點是實際中概率密度通常未知&#xff0c;需要通過大量數據估計。判別方法&#xff1a;假設判別函數的形式已知&…

Sentinel(三):Sentinel熔斷降級

一、Sentinel熔斷概念介紹 官方文檔網址&#xff1a;circuit-breaking | Sentinel 1、Sentinel熔斷基本介紹 除了流量控制以外&#xff0c;對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措 施之一。一個服務常常會調用別的模塊&#xff0c;可能是另外的一個遠程服…

PostgreSQL 主從集群搭建

下面是 PostgreSQL 主從復制&#xff08;Streaming Replication&#xff09;環境的安裝與配置指南&#xff0c;適合在兩臺或多臺服務器之間構建一主一從&#xff08;或一主多從&#xff09;的高可用讀寫分離系統。 環境準備 角色主機名/IP說明主庫192.168.1.10可讀寫&#xff…

STM32安全固件升級:使用自定義 bootloader 實現SD卡固件升級,包含固件加密

前言 在 STM32 嵌入式開發中&#xff0c;Bootloader 是一個不可或缺的模塊。ST 公司為 STM32 提供了功能完備的官方 Bootloader&#xff0c;支持多種通信接口&#xff08;如 USART、USB DFU、I2C、SPI 等&#xff09;&#xff0c;適用于標準的固件更新方案。 然而&#xff0c…