赞
踩
提示:以下是本篇文章正文内容,下面案例可供参考
SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。
在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构,S盒为固定的8比特输入8比特输出。
SM4.0中的指令长度被提升到大于64K(即64×1024)的水平,这是SM 3.0规格(渲染指令长度允许大于512)的128倍。
package main import ( "crypto/cipher" "demo1/utils" "encoding/hex" "fmt" "github.com/tjfoc/gmsm/sm4" ) //sm4加密 //src:明文 //key:秘钥 func EncryptSm4(src, key []byte) []byte { block, err := sm4.NewCipher(key) if err != nil { panic(err) } src = utils.PaddingText(src, block.BlockSize()) blockMode := cipher.NewCBCEncrypter(block, key[:block.BlockSize()]) dst := make([]byte, len(src)) blockMode.CryptBlocks(dst, src) return dst } //sm4解密 //src:密文 //key:秘钥 func DecryptSm4(src, key []byte) []byte { block, err := sm4.NewCipher(key) if err != nil { panic(err) } blockMode := cipher.NewCBCDecrypter(block, key[:block.BlockSize()]) dst := make([]byte, len(src)) blockMode.CryptBlocks(dst, src) newText := utils.UnPaddingText(dst) return newText } func main() { key := []byte("12345678abcdefgh") msg := []byte("wei") encrypt_msg := EncryptSm4(msg, key) fmt.Println("encrypt_msg = ", hex.EncodeToString(encrypt_msg)) decrypt_msg := DecryptSm4(encrypt_msg, key) fmt.Println("decrypt_msg = ", string(decrypt_msg)) }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。