相关疑难解决方法(0)

golang相当于PHP crypt()

PHP中的这行代码求值为true

echo '$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2' == crypt("enter-new-password",'$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2');
Run Code Online (Sandbox Code Playgroud)

我需要的是Golang中的crypt函数,它也将评估为true.

ATTEMPT 1

我尝试了这个,但它评估为false:

import "github.com/nyarla/go-crypt"
log.Println("$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2" == crypt.Crypt("enter-new-password","$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"))
Run Code Online (Sandbox Code Playgroud)

ATTEMPT 2

我还尝试定义和使用我在其他地方找到的这个crypt函数,但它也返回false:

package main

import (
    "fmt"
    "unsafe"
)

// #cgo LDFLAGS: -lcrypt
// #define _GNU_SOURCE
// #include <crypt.h>
// #include <stdlib.h>
import "C"

// crypt wraps C library crypt_r
func crypt(key, salt string) string {
    data := C.struct_crypt_data{}
    ckey := C.CString(key)
    csalt := C.CString(salt)
    out := C.GoString(C.crypt_r(ckey, csalt, &data))
    C.free(unsafe.Pointer(ckey))
    C.free(unsafe.Pointer(csalt))
    return out
}
Run Code Online (Sandbox Code Playgroud)

尝试3

我也试过这个,但它似乎没有支持CRYPT_BLOWFISH,这是旧的PHP5.3及更早版本所使用的:

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

所以我的问题是:

我如何获得一个golang地穴功能完全一样的琴弦的PHP crypt函数enter-new-password$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2

php crypt go

7
推荐指数
1
解决办法
467
查看次数

标签 统计

crypt ×1

go ×1

php ×1