首頁 >後端開發 >Golang >Golang 加密/蘭德線程安全嗎?

Golang 加密/蘭德線程安全嗎?

王林
王林轉載
2024-02-09 12:45:081138瀏覽

Golang 加密/兰德线程安全吗?

Golang是一種程式語言,它以其高效性和並發性而聞名。然而,關於Golang的加密和執行緒安全性一直是開發者關注的重點。在這篇文章中,php小編香蕉將分享關於Golang加密和Golang線程安全性的一些觀點和建議。我們將探討Golang在加密方面的特性,以及如何確保執行緒安全性,以幫助開發者更好地理解並應用Golang。無論你是初學者還是有經驗的開發者,這篇文章都將為你提供有價值的資訊和指導。

問題內容

math/rand.rand 的來源指出 read 不是執行緒安全的(共享來源時)。加密/蘭特怎麼樣?原始程式碼指出它使用 getrandom(2)/dev/urandom,但尚不清楚並發呼叫會發生什麼。

更新:評論有助於澄清區別

crypto/rand.Reader.Read(b []byte)
crypto/rand.Read(b []byte)

線程安全:

  1. 並發呼叫read會panic嗎?
  2. 並發呼叫時會保持隨機序列嗎?或者可以向並發呼叫者提供重複的內容嗎?

解決方法

  1. rand.Reader 來自crypto/rand 必須對於並發存取是安全的,因為它被定義為「加密安全隨機數產生器的全局共享實例」。無法在套件之間同步其使用。
  2. rand.Read 來自crypto/rand 是安全的,因為rand.Reader 是安全,而且它不會訪問任何其他共享狀態。

以上是Golang 加密/蘭德線程安全嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除