github.com/emmansun/gmsm@v0.29.1/docs/sm3.md (about) 1 # SM3密码杂凑算法 2 ## 参考标准 3 * 《GB/T 32905-2016 信息安全技术 SM3密码杂凑算法》 4 5 您可以从[国家标准全文公开系统](https://openstd.samr.gov.cn/)在线阅读此标准。 6 7 ## 概述 8 SM3密码杂凑算法,或者叫SM3哈希算法,它是一个输出结果为256位(32字节)的哈希算法。在本软件库中,SM3的实现(方法签名)与Go语言中的哈希算法,特别是SHA256保持一致,所以用法也是一样的。具体API文档,包括Example,请参考:[API Document](https://godoc.org/github.com/emmansun/gmsm)。 9 10 ## 常用用法示例 11 ```go 12 // 直接使用sm3.Sum方法 13 func ExampleSum() { 14 sum := sm3.Sum([]byte("hello world\n")) 15 fmt.Printf("%x", sum) 16 // Output: 4cc2036b86431b5d2685a04d289dfe140a36baa854b01cb39fcd6009638e4e7a 17 } 18 19 // 先创建sm3 hash实例,再进行hash计算 20 func ExampleNew() { 21 h := sm3.New() 22 h.Write([]byte("hello world\n")) 23 fmt.Printf("%x", h.Sum(nil)) 24 // Output: 4cc2036b86431b5d2685a04d289dfe140a36baa854b01cb39fcd6009638e4e7a 25 } 26 27 // 计算文件内容hash 28 func ExampleNew_file() { 29 f, err := os.Open("file.txt") 30 if err != nil { 31 log.Fatal(err) 32 } 33 defer f.Close() 34 35 h := sm3.New() 36 if _, err := io.Copy(h, f); err != nil { 37 log.Fatal(err) 38 } 39 40 fmt.Printf("%x", h.Sum(nil)) 41 } 42 ``` 43 44 ## 性能 45 请参考[SM3密码杂凑算法性能优化](https://github.com/emmansun/gmsm/wiki/SM3%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96)。 46