首頁 > 後端開發 > Golang > 主體

加密建置模組:安全樂高積木,Go Crypto 3

Mary-Kate Olsen
發布: 2024-10-13 06:12:30
原創
286 人瀏覽過

Cryptographic Building Blocks: The LEGO of Security, Go Crypto 3

嘿,加密貨幣探索者!準備好親自體驗 Go 的一些加密原語了嗎?將它們視為加密世界的樂高積木——簡單的部件,如果巧妙地組合在一起,可以建立驚人的安全功能。讓我們潛入吧!

雜湊函數:您的數位指紋製造商

首先,我們有雜湊函數。這些就像在旅遊景點將硬幣壓成橢圓形的機器。無論您輸入什麼,您總是會得到固定大小的輸出。但與那些便士機器不同的是,一個好的雜湊函數會為每個輸入創建一個獨特的「指紋」。

Go 的加密套件為我們提供了幾個雜湊函數:

1.SHA-256 和 SHA-224:加密世界的主力。以下是使用 SHA-256 的方法:

   import "crypto/sha256"
   data := []byte("Go crypto rocks!")
   hash := sha256.Sum256(data)
   fmt.Printf("%x\n", hash)
登入後複製

2.SHA-512 和朋友:當您需要額外的安全性(或只是像大數字)時:

   import "crypto/sha512"
   data := []byte("Go crypto rocks even harder!")
   hash := sha512.Sum512(data)
   fmt.Printf("%x\n", hash)
登入後複製

3.SHA-3:新事物,能夠抵抗 SHA-2 的一些理論攻擊:

   import "golang.org/x/crypto/sha3"
   data := []byte("Go crypto rocks in the future!")
   hash := sha3.Sum256(data)
   fmt.Printf("%x\n", hash)
登入後複製

現在,您可能會看到 MD5 和 SHA-1 潛伏在周圍。它們就像抽屜裡的舊翻蓋手機 - 它們仍然可以使用,但現在您不想依賴它們來處理任何重要的事情。

訊息驗證碼 (MAC):您的數位印章

接下來,我們有 MAC。將它們想像成中世紀信件上的蠟封。他們不會對內容保密,但會證明訊息是誰發送的,並且訊息沒有被篡改。

  1. HMAC(基於雜湊的訊息驗證碼):MAC 的瑞士軍刀:
   import (
       "crypto/hmac"
       "crypto/sha256"
   )
   key := []byte("super-secret-key")
   message := []byte("The eagle has landed")
   mac := hmac.New(sha256.New, key)
   mac.Write(message)
   signature := mac.Sum(nil)
   fmt.Printf("%x\n", signature)
登入後複製
  1. CMAC(基於密碼的訊息驗證程式碼):不在標準庫中,但如果需要,可以使用:
   import (
       "crypto/aes"
       "golang.org/x/crypto/cmac"
   )
   key := []byte("16-byte-long-key")
   message := []byte("Shaken, not stirred")
   cipher, _ := aes.NewCipher(key)
   mac, _ := cmac.New(cipher)
   mac.Write(message)
   signature := mac.Sum(nil)
   fmt.Printf("%x\n", signature)
登入後複製

隨機數字產生:您的數字骰子

最後但絕對不是最不重要的,我們有隨機數產生。這就像擁有一個擁有數十億面的完美、公正的骰子。它對於產生密鑰、隨機數字以及任何其他需要不可預測性的地方至關重要。

Go 為此提供了加密/蘭特:

import (
    "crypto/rand"
    "encoding/binary"
)

// Roll a 32-bit die
var number int32
binary.Read(rand.Reader, binary.BigEndian, &number)
fmt.Println("Random number:", number)

// Generate 16 random bytes
bytes := make([]byte, 16)
_, err := rand.Read(bytes)
if err != nil {
    panic("Oops, the universe broke!")
}
fmt.Printf("Random bytes: %x\n", bytes)
登入後複製

請記住,始終使用 crypto/rand,而不是 math/rand。使用 math/rand 進行加密就像使用玩具保險箱來存放您的貴重物品!

最佳實踐:加密貨幣的黃金法則

現在您已經有了這些閃亮的新工具,請記住以下一些黃金規則:

  1. 堅持使用強的東西:對於散列,SHA-256 或更好。這就像選擇一把好鎖 - 選擇你能買得起的最好的。

  2. 保守你的秘密:MAC 鑰匙就像你家的鑰匙。不要讓它們隨意亂放!

  3. 垃圾輸入,垃圾輸出:產生金鑰或其他秘密材料時,使用高品質的隨機輸入。不允許生日或“密碼123”!

  4. 檢查你的工作:總是檢查並處理錯誤,尤其是隨機數產生。這就像仔細檢查你是否鎖上了門。

  5. 了解你的極限:注意效能影響。加密操作可能很繁重,尤其是在大數據或高流量場景中。分析您的程式碼!

接下來是什麼?

恭喜!您剛剛為您的加密工具帶添加了一些強大的工具。這些原語是我們在密碼學中所做的一切的基礎。

在接下來的部分中,我們將了解這些構建塊如何組合在一起以創建更複雜的加密操作。我們將深入研究加密(保密)和數位簽章(證明誰寫了什麼)。

請記住,在密碼學領域,理解這些基礎知識至關重要。這就像在跑步之前先學會走路 - 掌握這些,您將立即在您的 Go 應用程式中建立諾克斯堡級別的安全性!

那麼,我們來試試這些新工具怎麼樣呢?嘗試對您的名字進行哈希處理,或產生一些隨機數字。玩耍、實驗,最重要的是,玩得開心!畢竟,密碼學只是一種奇特的數學,當你用它來保護數字秘密時,數學會非常酷。快樂編碼,加密冠軍!

以上是加密建置模組:安全樂高積木,Go Crypto 3的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!