tags: `.Net` `筆記` # Bcrypt > BCrypt.Net > LINQPad8 Bcrypt 能夠對字串做雜湊加密,同一個字串也能夠雜湊出不同的內容防範駭客的入侵 ## Bcrypt.Net 在 .Net 的話下面就以 [Bcrypt.Net](https://github.com/BcryptNet/bcrypt.net) 做一些例子 簡單的 hash 跟 Verify 如下 ```csharp= void Main() { string password = "HelloWorld"; string passwordhash = BCrypt.Net.BCrypt.HashPassword(password); passwordhash.Dump(); BCrypt.Net.BCrypt.Verify(password, passwordhash).Dump(); } ``` ![image](https://hackmd.io/_uploads/rymRZBD-0.png) 在預設情況下,已經把 Salt 加入。但也可以選擇多一些客製化增加複雜度 ```csharp= void Main() { string password = "HelloWorld"; var salt = BCrypt.Net.BCrypt.GenerateSalt(); string passwordhash = BCrypt.Net.BCrypt.HashPassword(password, salt); // or // intWorker 會影響加密的速度,依不同的情境斟酌使用 // (用到 31 可能會跑不出結果...XD) var salt = BCrypt.Net.BCrypt.GenerateSalt(15, 'a'); string passwordhash = BCrypt.Net.BCrypt.HashPassword(password, salt); } ``` 下面增加幾個例子來測試,同一個字串經過兩次不同的 salt 及驗證 ```csharp= void Main() { string password = "HelloWorld"; var salt = BCrypt.Net.BCrypt.GenerateSalt(); string passwordhash = BCrypt.Net.BCrypt.HashPassword(password, salt); var salt2 = BCrypt.Net.BCrypt.GenerateSalt(); string passwordhash2 = BCrypt.Net.BCrypt.HashPassword(password, salt2); passwordhash.Dump(); passwordhash2.Dump(); BCrypt.Net.BCrypt.Verify(password, passwordhash).Dump(); BCrypt.Net.BCrypt.Verify(password, passwordhash2).Dump(); } ``` ![image](https://hackmd.io/_uploads/Byq4pSDWR.png) ### Enhanced Entropy Bcrypt.Net 提供了以下幾個增強型的方法 * EnhancedHashPassword * EnhancedVerify ```csharp= void Main() { string password = "HelloWorld"; string passwordhash = BCrypt.Net.BCrypt.EnhancedHashPassword(password); passwordhash.Dump(); BCrypt.Net.BCrypt.Verify(password, passwordhash).Dump(); // 記得已經使用 EnhancedHashPassword // 要同一併使用 EnhancedVerify BCrypt.Net.BCrypt.EnhancedVerify(password, passwordhash).Dump(); } ``` ![image](https://hackmd.io/_uploads/B1-0YwwWC.png)