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