C#中產生SHA512
要在C#中生成帶有鹽值(Salt)的SHA-512哈希值,首先需要生成或提供一個鹽值,然後將這個鹽值與原始輸入(比如用戶的密碼)結合在一起,最後對這個結合後的字符串進行哈希處理。下面的示例代碼展示了如何生成一個隨機鹽值,以及如何使用這個鹽值和用戶輸入來產生SHA-512哈希值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; using System.Security.Cryptography; using System.Text; public class HashWithSaltGenerator { public static string GenerateSalt(int size) { var rng = new RNGCryptoServiceProvider(); var buffer = new byte[size]; rng.GetBytes(buffer); return Convert.ToBase64String(buffer); } public static string GenerateSHA512String(string inputString, string salt) { using (SHA512 sha512 = SHA512.Create()) { byte[] bytes = Encoding.UTF8.GetBytes(inputString + salt); byte[] hash = sha512.ComputeHash(bytes); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { stringBuilder.Append(hash[i].ToString("x2")); } return stringBuilder.ToString(); } } } |
在這個例子中,GenerateSalt方法用於生成一個指定大小的隨機鹽值。這個鹽值是通過RNGCryptoServiceProvider類生成的隨機字節數組,然後將其轉換為Base64字符串以便於存儲和使用。
GenerateSHA512String方法現在接受一個額外的參數salt,並將這個鹽值與輸入字符串結合後進行哈希處理,其餘步驟與之前相同。
使用鹽值可以提高密碼存儲的安全性,因為即使兩個用戶使用了相同的密碼,由於鹽值的唯一性,他們的哈希值也會不同,從而增加了破解的難度。在實際應用中,每個用戶的鹽值應該是唯一的,並且與用戶的密碼哈希值一起存儲。
VB中產生SHA512
在VB.NET中生成SHA512哈希值,可以使用.NET框架中的System.Security.Cryptography命名空間提供的SHA512類。以下是一個示例函數,展示如何使用這個類來對字符串生成SHA512哈希值。此函數接受一個要加密的字符串(例如用戶的密碼)和一個鹽值,然後返回該字符串的SHA512哈希值。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Imports System.Security.Cryptography Imports System.Text Public Function GenerateSHA512Hash(input As String, salt As String) As String Dim bytesToHash() As Byte = Encoding.UTF8.GetBytes(input & salt) Using hasher As SHA512 = SHA512.Create() Dim hashedBytes() As Byte = hasher.ComputeHash(bytesToHash) ' 將哈希值轉換為16進位字符串 Dim hash As String = BitConverter.ToString(hashedBytes).Replace("-", String.Empty) Return hash End Using End Function |
這個函數首先將輸入字符串和鹽值結合,然後使用UTF8編碼轉換成字節數組。接著,它創建一個SHA512實例並使用ComputeHash方法來計算輸入數據的哈希值。最後,它將得到的哈希字節數組轉換為一個16進位的字符串(去掉中間的連接符”-“),並返回這個字符串。
可以將此函數用於需要生成SHA512哈希的任何地方,比如用戶密碼的儲存或驗證過程中。使用鹽值可以提高密碼儲存的安全性,因為它使得即使對於相同的密碼,其生成的哈希值也會不同,從而增加了破解的難度。
StorePrecedure中產生SHA512
在SQL Server中,您可以直接使用內置函數來生成SHA-512哈希值。不過,要留意,直到最近的版本,SQL Server 才原生支持的加密函數SHA-512。如果使用的是SQL Server 2016(或更新版本),可以使用HASHBYTES函數,該函數支持多種哈希算法,包括SHA-512。
以下是一個示例,說明如何在存儲過程(Stored Procedure,簡稱SP)中使用HASHBYTES函數來生成SHA-512哈希值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE PROCEDURE GenerateSHA512 @Input NVARCHAR(MAX), @Salt NVARCHAR(MAX) AS BEGIN -- 結合輸入和鹽值 DECLARE @CombinedInput NVARCHAR(MAX) = CONCAT(@Input, @Salt); -- 生成SHA-512哈希值 DECLARE @HashValue VARBINARY(MAX) = HASHBYTES('SHA2_512', @CombinedInput); -- 返回哈希值(以16進位格式) SELECT CONVERT(NVARCHAR(MAX), @HashValue, 2) AS HashedOutput; END |
在這個存儲過程中,@Input是您想要哈希的字符串(例如用戶的密碼),而@Salt是用於增加哈希安全性的鹽值。CONCAT函數用於結合輸入字符串和鹽值,HASHBYTES函數則用來生成SHA-512哈希。最後,將生成的二進位哈希值轉換為NVARCHAR格式以方便查看和儲存。
注意,將敏感數據(如密碼)的哈希處理工作放在資料庫層做,需要確保資料庫的安全性得到了妥善的處理和配置,以避免安全風險。此外,當將密碼或其他敏感信息發送到資料庫進行哈希處理時,確保使用安全的連接,防止數據在傳輸過程中被攔截。