echo 'a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2' == crypt("enter-new-password",'a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2');
我需要的是Golang中的crypt函数,它也将评估为true.
ATTEMPT 1
我尝试了这个,但它评估为false:
import "github.com/nyarla/go-crypt"log.Println("a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2" == crypt.Crypt("enter-new-password","a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"))
ATTEMPT 2
我还尝试定义和使用我在其他地方找到的这个crypt函数,但它也返回false:
package mainimport ( "fmt" "unsafe")// #cgo LDFLAGS: -lcrypt// #define _GNU_SOURCE// #include <crypt.h>// #include <stdlib.h>import "C"// crypt wraps C library crypt_rfunc 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}
尝试3
我也试过这个,但它似乎没有支持CRYPT_BLOWFISH,这是旧的PHP5.3及更早版本所使用的:
Why does my crypt package give me invalid magic prefix error?
所以我的问题是:
如何使golang crypt函数的行为与字符串输入-new-password和$2a $09 $f5561d2634fb28a969f2dO8QeQ70f4bjCnF / .GvPpjj.8jgmtzZP2的PHP crypt函数完全相同?
虽然我没有找到与PHP的crypt函数等效的精确“Go crypt函数”,但我找到了另一种选择.以下解决了我的问题
import "golang.org/x/crypto/bcrypt"// check will be nil if the bcrypt version of "enter-new-password" is the same as the "a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2" . Otherwise check will be an error objectcheck := bcrypt.CompareHashAndPassword([]byte("a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"),[]byte("enter-new-password"))log.Println(check)
golang.org/x/crypto/bcrypt/bcrypt_test.go提供了一些有关如何使用此模块的有用示例.
显然PHP的crypt函数有许多不同的散列值的方法,比如sha256,sha512,blowfish等……似乎有很多go lang模块,但你必须明确说明散列类型,成本等.在我的问题中,$2a $作为哈希值的前缀的存在建议使用一些河豚类型哈希.我之前的一些尝试没有考虑到这一点.实际上,尝试3中的模块不支持河豚.
总结以上是内存溢出为你收集整理的golang相当于PHP crypt()全部内容,希望文章能够帮你解决golang相当于PHP crypt()所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)