Go 语言实现 PHP password_hash() 和 password_verify() 函数

yufei       4 年, 8 月 前       1936

Go 语言实现 PHP password_hash() 和 password_verify() 函数

package main 

import (
    "fmt"
    "golang.org/x/crypto/bcrypt"
)

func PasswordHash(passwd string) (string, error) {
    bytes, err := bcrypt.GenerateFromPassword([]byte(passwd),12)
    return string(bytes),err
}


func PasswordVerify(passwd,hash string) bool {
    err := bcrypt.CompareHashAndPassword([]byte(hash),[]byte(passwd))
    return err == nil
}

func main() {
    password := "123456"
    hash, _ := PasswordHash(password)

    fmt.Println("密码:",password)
    fmt.Println("hash:",hash)

    match := PasswordVerify(password,hash)
    fmt.Println("验证:",match)
}

输出结果为

密码: 123456
hash: $2a$12$Yg4qpMNaFaHxa44RD7Thle/o4W0bhSBr1YHYLzi/gZOV1wIGl20Vy
验证: true

$2y$$2a$ 有啥区别

没区别,$2y$ 是 PHP 实现 $2a$ 的时候出了个差错,修复的时候改成了 $2y$。 具体可以看这个 https://stackoverflow.com/questions/15733196/where-2x-prefix-are-used-in-bcrypt

这也是你会看到很多语言的实现都是 $2a$,偏偏 PHP 不一样的原因

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.