为什么我的crypt包给我无效的魔术前缀错误?

Joh*_*ohn -5 crypt go

我有以下代码:

import "github.com/kless/osutil/user/crypt/sha512_crypt"
c := sha512_crypt.New()
hash, err := c.Generate([]byte("enter-new-password"), []byte("$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"))
if err != nil {
    panic(err)
}
Run Code Online (Sandbox Code Playgroud)

它产生了以下错误

http:恐慌服务192.168.0.16:56730:无效的魔术前缀

为什么会发生这种情况,我该如何解决?

pet*_*rSO 5

为什么会发生这种情况,我该如何解决?


你有一个无效的魔术前缀.


github.com/tredoe/osutil/user/crypt/sha512_crypt/sha512_crypt.go

if !bytes.HasPrefix(salt, c.Salt.MagicPrefix) {
  return "", common.ErrSaltPrefix
}
Run Code Online (Sandbox Code Playgroud)

阅读crypt包代码.


PHP:crypt - 单向字符串哈希

PHP:password_hash - 创建密码哈希

阅读PHP文档.

请参阅您之前的问题:golang等效于PHP crypt().


提供有效的魔术前缀.


例如,

package main

import (
    "fmt"

    "github.com/kless/osutil/user/crypt/sha512_crypt"
)

func main() {
    c := sha512_crypt.New()
    magic := sha512_crypt.MagicPrefix
    hash, err := c.Generate(
        []byte("enter-new-password"),
        []byte(magic+"$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"),
    )
    if err != nil {
        panic(err)
    }
    fmt.Println(hash)
}
Run Code Online (Sandbox Code Playgroud)

输出:

$6$$.AVE44JRnLFr9TZx3zASJX6V3Uu0jpnrOV6fW1T5NHy3MUKPaJXHGvjooxrAkYsuIL2HwS/sYgzUZ.cg8FTtz/
Run Code Online (Sandbox Code Playgroud)

注意:

import "github.com/kless/osutil/user/crypt/sha512_crypt"
Run Code Online (Sandbox Code Playgroud)

现在是新位置的别名

import "github.com/tredoe/osutil/user/crypt/sha512_crypt"
Run Code Online (Sandbox Code Playgroud)