HMAC是使用key标记信息的加密hash。接收者使用相同的key逆运算来认证hash。
出于安全目的,接收者应使用Equal函数比较认证码:
这个包一共提供了两个对外公开的函数:
func Equal(mac1, mac2 []byte) bool
比较两个MAC是否相同,而不会泄露对比时间信息。(以规避时间侧信道攻击;指通过计算比较时花费的时间的长短来获取密码的信息,用于密码破解)
func New(h func() hash.Hash, key []byte) hash.Hash
New函数返回一个采用hash.Hash作为底层hash接口、key作为密钥的HMAC算法的hash接口。
先看一下目录结构,注意这里的src名称是必须的,go在设置了GOPATH后,默认会添加src去寻找package,暂未查询是否有方法不按照src查询
根据上面的描述,Go语言中通过包中函数的名称来区分公共函数和私有函数,我们在main函数中是无法调用myPrivateFunc的
此时如果执行通过go run方式执行,会看到如下的提示信息,这与大部分语言对于包管理方式相关,所以我们通过两种不同的方法来让代码执行起来
返回如下,这里面对我们后续执行有影响的两个参数GO111MODULE和GOPATH
如果要使用gopath模式引用包,则需要关闭mod模式
设置GOPATH为当前路径,即main.go所在的路径
此时再查看go env时,GOPATH已经发生改变
我们再次尝试执行代码
可以看到public函数被调用