亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang使用bcrypt實現(xiàn)密碼加密和校驗的操作代碼

 更新時間:2024年05月20日 14:53:32   作者:彭世瑜  
bcrypt可以用于數(shù)據(jù)庫中的用戶密碼保存,相比md5而言更加的安全可靠,這篇文章主要介紹了Golang使用bcrypt實現(xiàn)密碼加密和校驗的操作代碼,需要的朋友可以參考下

bcrypt可以用于數(shù)據(jù)庫中的用戶密碼保存,相比md5而言更加的安全可靠

文檔

https://pkg.go.dev/golang.org/x/crypto/bcrypt

文檔上給出了標準文檔,這個庫是下面這個文件描述的算法golang實現(xiàn):

https://www.usenix.org/legacy/event/usenix99/provos/provos.pdf

安裝

go get -u golang.org/x/crypto/bcrypt

加密示例

package main
import (
    "fmt"
    "golang.org/x/crypto/bcrypt"
)
func main() {
    password := "123456"
    hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
    fmt.Println(string(hashedPassword))
    // $2a$10$EvdBpymvP7uDfI0TFRD6RO3YXLwQWUVYKMDqbWFloYCtyNXHCmbD2
    // $2a$10$6JDH6z7dJljoDo4VolpHbeIgzqHwhUvF1JRJ/h7Ibf/PjGtx.wZGG
}

可以看到,多次運行后,生成的結(jié)果是不一樣的

bcrypt不能解密,不過可以比較加密后的數(shù)據(jù)和加密前的數(shù)據(jù)是否相匹配

package main
import (
    "fmt"
    "golang.org/x/crypto/bcrypt"
)
func main() {
    password := "123456"
    hashedPassword := "$2a$10$EvdBpymvP7uDfI0TFRD6RO3YXLwQWUVYKMDqbWFloYCtyNXHCmbD2"
    err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password))
    fmt.Println(err)
    // <nil>
}

由于算法的入?yún)⒑统鰠⒍际亲止?jié)類型的數(shù)據(jù),為了便于使用,可以將兩個方法簡單封裝成一個工具類,將入?yún)⒑统鰠⒍几臑槭亲址愋偷臄?shù)據(jù)

package utils
import (
    "golang.org/x/crypto/bcrypt"
)
func GenerateFromPassword(password string) (string, error) {
    hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
    if err != nil {
        return "", err
    }
    return string(hashedPassword), err
}
func CompareHashAndPassword(hashPassword string, password string) bool {
    err := bcrypt.CompareHashAndPassword([]byte(hashPassword), []byte(password))
    return err == nil
}

到此這篇關(guān)于Golang使用bcrypt實現(xiàn)密碼加密和校驗的文章就介紹到這了,更多相關(guān)Golang密碼加密和校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 創(chuàng)建Go工程化項目布局詳解

    創(chuàng)建Go工程化項目布局詳解

    這篇文章主要介紹了創(chuàng)建Go工程化項目布局詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 淺談go中切片比數(shù)組好用在哪

    淺談go中切片比數(shù)組好用在哪

    數(shù)組和切片都是常見的數(shù)據(jù)結(jié)構(gòu),本文將介紹Go語言中數(shù)組和切片的基本概念,同時詳細探討切片的優(yōu)勢,感興趣的可以了解下
    2023-06-06
  • go語言beego框架分頁器操作及接口頻率限制示例

    go語言beego框架分頁器操作及接口頻率限制示例

    這篇文章主要為大家介紹了go語言beego框架分頁器操作使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go語言中使用gorm小結(jié)

    Go語言中使用gorm小結(jié)

    這篇文章主要給大家介紹了Go語言中如何使用gorm,文中介紹的很詳細,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • Golang?動態(tài)腳本調(diào)研詳解

    Golang?動態(tài)腳本調(diào)研詳解

    這篇文章主要為大家介紹了Golang?動態(tài)腳本調(diào)研詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • golang 實現(xiàn)struct、json、map互相轉(zhuǎn)化

    golang 實現(xiàn)struct、json、map互相轉(zhuǎn)化

    這篇文章主要介紹了golang 實現(xiàn)struct、json、map互相轉(zhuǎn)化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • GoLang實現(xiàn)Viper庫的封裝流程詳解

    GoLang實現(xiàn)Viper庫的封裝流程詳解

    Viper是一個用于Go語言應(yīng)用程序的配置管理庫,它提供了一種簡單而靈活的方式來處理應(yīng)用程序的配置,支持多種格式的配置文件,這篇文章主要介紹了GoLang封裝Viper庫的流程,感興趣的同學可以參考下文
    2023-05-05
  • Go語言實現(xiàn)聊天小工具的示例代碼

    Go語言實現(xiàn)聊天小工具的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Go語言實現(xiàn)聊天小工具,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Go語言實現(xiàn)二分查找方法示例

    Go語言實現(xiàn)二分查找方法示例

    這篇文章主要為大家介紹了Go語言實現(xiàn)二分查找方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 淺析go語言如何實現(xiàn)協(xié)程的搶占式調(diào)度的

    淺析go語言如何實現(xiàn)協(xié)程的搶占式調(diào)度的

    go語言通過GMP模型實現(xiàn)協(xié)程并發(fā),為了避免單協(xié)程持續(xù)持有線程導致線程隊列中的其他協(xié)程饑餓問題,設(shè)計者提出了一個搶占式調(diào)度機制,本文會基于一個簡單的代碼示例對搶占式調(diào)度過程進行深入講解剖析
    2024-04-04

最新評論