# Cryptography **Repository Path**: scgg/cryptography ## Basic Information - **Project Name**: Cryptography - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-19 - **Last Updated**: 2022-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 国密算法系列 > 国密算法的全部标准可在[**国家标准全文公开系统**](http://openstd.samr.gov.cn/bzgk/gb/index) 上检索 ### 1. SM4分组密码 技术文档:[http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=7803DE42D3BC5E80B0C3E5D8E873D56A](http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=7803DE42D3BC5E80B0C3E5D8E873D56A) 迭代结构: ![sm4](./assets/sm4/sm4.jpg) 加密性能: ![性能](./assets/sm4/sm4-1.png) 代码实现:`dca/SM4.go` 使用示例: ```go package main import ( "MyCrypto/dca" "encoding/hex" "fmt" ) // example one: 针对[]uint32 // 利用dca.StringToUint32函数将string转换为[]uint32 // 本示例为国密标准官方示例,得到的结果与官方文档相同 func exampleOne() { text := []uint32{0x01234567, 0x89ABCDEF, 0xFEDCBA98, 0x76543210} key := []uint32{0x01234567, 0x89ABCDEF, 0xFEDCBA98, 0x76543210} // 得到加密结果 s := hex.EncodeToString(dca.SM4(text, key)) // SM4函数返回byte数组 fmt.Println(s) // 输出:681edf34d206965e86b3e94f536e4246 // 解密 g, _ := hex.DecodeString(s) res := dca.DecryptSM4(dca.ByteToUint32(g), key) fmt.Println(res) } // example two: 针对string // 对示例1函数的进一步封装 func exampleTwo() { text := "123, 木头人!" key := "hello, world" // 得到string类型的密文 cipher := dca.CryptoSM4ToString(text, key) // 解密得到明文 //res == text res := dca.DecryptSM4ToString(cipher, key) fmt.Println("密文:", cipher, "明文:", res) // 密文: 6a8b3149f1fc49dec2e5585597a9830f 明文: 123, 木头人! } ``` --- SM4算法更新记录 **2022-01-20:** - 改进了非线性映射算法,使得加密算法性能有所提升 ![improve](./assets/sm4/sm4-improNonlinear.png) --- ## 2. SM3杂凑密码 技术文档:[http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=45B1A67F20F3BF339211C391E9278F5E](http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=45B1A67F20F3BF339211C391E9278F5E) 核心步骤: ![sm3](./assets/sm3/sm3-1.jpg) 算法性能: ![sm3](./assets/sm3/sm3-2.png) 代码实现:`dca/SM3.go` 使用示例: ```go package main import ( "MyCrypto/dca" "fmt" ) // SM3使用非常简单 func example() { message := "123456" // SM3签名为: func SM3(message []byte) string sum := dca.SM3([]byte(message)) fmt.Println(sum) // result: 207cf410532f92a47dee245ce9b11ff71f578ebd763eb3bbea44ebd043d018fb } ```