浦东新区苏州网站建设,陇南地网站seo,百度推广登录入口官网网,昆明网站建设工作室有哪些文章目录前言一、SM4是什么#xff1f;二、go语言实现前言
提示#xff1a;以下是本篇文章正文内容#xff0c;下面案例可供参考
一、SM4是什么#xff1f;
SM4.0#xff08;原名SMS4.0#xff09;是中华人民共和国政府采用的一种分组密码标准#xff0c;由国家密码管…
文章目录前言一、SM4是什么二、go语言实现前言
提示以下是本篇文章正文内容下面案例可供参考
一、SM4是什么
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倍。
二、go语言实现
package mainimport (crypto/cipherdemo1/utilsencoding/hexfmtgithub.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))
}