首页 > 后端开发 > Golang > 如何在没有 syscall 或 scrypt 的情况下安全地在 Golang/App Engine 中对密码进行哈希处理?

如何在没有 syscall 或 scrypt 的情况下安全地在 Golang/App Engine 中对密码进行哈希处理?

Linda Hamilton
发布: 2024-10-30 08:26:02
原创
666 人浏览过

How to Securely Hash Passwords in Golang/App Engine Without syscall or scrypt?

在 Golang/App Engine 中安全地散列密码,无需系统调用或 scrypt

虽然 bcrypt 和 scrypt 通常用于密码散列,但它们可能不由于系统调用可访问性,适合 App Engine。作为替代方案,请考虑利用 go.crypto 库进行安全密码散列。

go.crypto 包提供对 pbkdf2 和 bcrypt 的支持。两种实现均完全用 Go 编写,确保与 App Engine 的兼容性。

1.使用 bcrypt

使用以下步骤实现 bcrypt:

<code class="bash">go get golang.org/x/crypto/bcrypt</code>
登录后复制

示例用法:

<code class="go">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))</code>
登录后复制

这将产生类似于以下内容的输出:

a$sylGijT5CIJZ9ViJsxZOS.IB2tOtJ40hf82eFbTwq87iVAOb5GL8e
登录后复制

2。使用 pbkdf2

对于使用 pbkdf2 的简单哈希:

<code class="go">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))</code>
登录后复制

以上是如何在没有 syscall 或 scrypt 的情况下安全地在 Golang/App Engine 中对密码进行哈希处理?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板