首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang/App安全地散列用户密码

Golang/App安全地散列用户密码
EN

Stack Overflow用户
提问于 2013-08-31 07:23:48
回答 1查看 7.3K关注 0票数 10

我通常使用bcrypt库进行密码散列,但由于库使用了syscall,所以无法这样做。我也试过氪星。还有哪些方法是安全的,哪一种是最好的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-07 04:43:09

看看go.crypto。它提供对pbkdf2和bcrypt的支持。这两个实现都是纯用Go编写的,应该可以在GAE上工作。

最简单的使用可能是bcrypt。要运行包,请运行:

代码语言:javascript
复制
go get golang.org/x/crypto/bcrypt

示例用法:

代码语言:javascript
复制
import "golang.org/x/crypto/bcrypt" 

func clear(b []byte) {
    for i := 0; i < len(b); i++ {
        b[i] = 0;
    }
}

func Crypt(password []byte) ([]byte, error) {
    defer clear(password)
    return bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
}

ctext, err := Crypt(pass)

if err != nil {
    log.Fatal(err)
}

fmt.Println(string(ctext))

输出将如下所示:

代码语言:javascript
复制
$2a$10$sylGijT5CIJZ9ViJsxZOS.IB2tOtJ40hf82eFbTwq87iVAOb5GL8e

如果您只想使用哈希,请使用pbkdf2。示例:

代码语言:javascript
复制
import "golang.org/x/crypto/pbkdf2"

func HashPassword(password, salt []byte) []byte {
    defer clear(password)
    return pbkdf2.Key(password, salt, 4096, sha256.Size, sha256.New)
}

pass := []byte("foo")
salt := []byte("bar")

fmt.Printf("%x\n", HashPassword(pass, salt))
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18545676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档