17 Commits

Author SHA1 Message Date
68a1466365 feat(更新依赖): 更新依赖 2024-12-12 09:25:11 +08:00
4b28aed195 feat(升级依赖): 升级依赖 2024-12-05 10:16:14 +08:00
049b1d61d1 feat(更新依赖): 更新依赖 2024-09-16 12:31:29 +08:00
1f9473afbd feat(升级依赖): 升级依赖 2024-08-21 17:04:58 +08:00
e2ff6bb6df feat(升级依赖): 升级依赖 2024-06-05 20:56:14 +08:00
4f84704da4 feat(升级依赖): 升级依赖 2024-05-07 18:47:55 +08:00
f894c870d4 feat(更新依赖): 更新依赖 2024-04-09 14:23:54 +08:00
a2cc489c96 feat(升级依赖): 升级依赖 2024-03-13 17:08:22 +08:00
61175b11c8 feat(升级依赖): 升级依赖 2024-02-13 01:22:55 +08:00
c8d79e8791 feat(更新依赖): 更新依赖 2024-01-31 23:13:12 +08:00
c88c500314 feat(更新依赖): 更新依赖 2023-11-14 14:37:45 +08:00
5f48988ade feat(更新依赖): 更新依赖 2023-09-14 17:05:03 +08:00
070f86013a feat(升级依赖): 升级依赖 2022-03-28 10:47:33 +08:00
c0ecb85a53 feat(更新依赖): 更新依赖
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2022-02-06 21:22:17 +08:00
0eae46dfb5 Update README.md
All checks were successful
continuous-integration/drone/push Build is passing
2021-01-21 17:31:12 +08:00
87a2045616 docs(更新文档): 更新文档 2020-10-21 14:58:40 +08:00
4b6cac9d6f docs(更新文档): 添加注释 2020-10-21 14:54:59 +08:00
4 changed files with 14 additions and 11 deletions

View File

@ -1,4 +1,4 @@
# idkey # idkey [![PkgGoDev](https://pkg.go.dev/badge/github.com/xiaoqidun/idkey)](https://pkg.go.dev/github.com/xiaoqidun/idkey)
Golang Argon2id 密码hash和验证 Golang Argon2id 密码hash和验证
# 安装方法 # 安装方法
go get -u github.com/xiaoqidun/idkey go get -u github.com/xiaoqidun/idkey

6
go.mod
View File

@ -1,5 +1,7 @@
module github.com/xiaoqidun/idkey module github.com/xiaoqidun/idkey
go 1.15 go 1.20
require golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de require golang.org/x/crypto v0.31.0
require golang.org/x/sys v0.28.0 // indirect

12
go.sum
View File

@ -1,8 +1,4 @@
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

View File

@ -10,12 +10,14 @@ import (
"strings" "strings"
) )
// Data 密文编码结构
type Data struct { type Data struct {
EncodeOptions // 加密选项 EncodeOptions // 加密选项
Hash []byte // 密码密文 Hash []byte // 密码密文
Salt []byte // 加密盐值 Salt []byte // 加密盐值
} }
// EncodeOptions 密文编码选项
type EncodeOptions struct { type EncodeOptions struct {
Time uint32 // 时间参数 Time uint32 // 时间参数
Memory uint32 // 内存参数 Memory uint32 // 内存参数
@ -23,6 +25,7 @@ type EncodeOptions struct {
KeyLen uint32 // 密文长度 KeyLen uint32 // 密文长度
} }
// Encode 将密码编码成密文
func Encode(password []byte, options *EncodeOptions) string { func Encode(password []byte, options *EncodeOptions) string {
salt := generateSalt(16) salt := generateSalt(16)
data := &Data{ data := &Data{
@ -58,6 +61,7 @@ func Encode(password []byte, options *EncodeOptions) string {
) )
} }
// Decode 获取密文编码结构
func Decode(passwordHash string) (data *Data, err error) { func Decode(passwordHash string) (data *Data, err error) {
data = &Data{} data = &Data{}
params := strings.Split(passwordHash, "$") params := strings.Split(passwordHash, "$")
@ -102,6 +106,7 @@ func Decode(passwordHash string) (data *Data, err error) {
return return
} }
// Verify 验证密码编码后是否等于密文
func Verify(password []byte, passwordHash string) bool { func Verify(password []byte, passwordHash string) bool {
data, err := Decode(passwordHash) data, err := Decode(passwordHash)
if err != nil { if err != nil {