2 回答
TA贡献1824条经验 获得超8个赞
例如,
var data, nonce, previousHash []byte
unixtime := strconv.FormatInt(time.Now().Unix(), 10)
hasher := sha1.New()
hasher.Write(data)
hasher.Write(nonce)
hasher.Write([]byte(unixtime))
hasher.Write(previousHash)
hash := hasher.Sum(nil)
或者,
var data, nonce, previousHash []byte
unixtime := strconv.FormatInt(time.Now().Unix(), 10)
soup := make([]byte, 0, len(data)+len(nonce)+len(unixtime)+len(previousHash))
soup = append(soup, data...)
soup = append(soup, nonce...)
soup = append(soup, unixtime...)
soup = append(soup, previousHash...)
hasher := sha1.New()
hasher.Write(soup)
hash := hasher.Sum(nil)
笔记:
unixtime := time.Now().Unix()
unixtimeStr := string(unixtime)
是荒谬的。它始终是 Unicode 替换字符。例如,
package main
import (
"fmt"
"time"
"unicode"
)
func main() {
unixtime := time.Now().Unix()
unixtimeStr := string(unixtime)
fmt.Println(unixtimeStr == string(unicode.ReplacementChar))
}
输出:
true
要将整数转换为字符串,请使用strconv包。例如,
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
unixtimeStr := strconv.FormatInt(time.Now().Unix(), 10)
fmt.Println(unixtimeStr)
}
输出:
1257894000
TA贡献1856条经验 获得超11个赞
我应该指出这hash.Hash
是一个io.Writer
所以你可以将它作为第一个参数传递给fmt.Fprintf(...)
-- 并且,由于字节切片的动词fmt
是正确的%s
,你可以通过以下方式使其更具可读性:
h := sha1.New() fmt.Fprintf(h, "%s%s%d%s", data, nonce, time.Now().Unix(), prev)
...并且,它也为您处理整数转换(使用%d
)
注意:fmt.Fprintf(...)
不是很快;如果性能很重要,你应该找到另一种方法来做到这一点。性能和可读性通常是一个微妙的平衡。
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报