我是靠谱客的博主 单纯冰淇淋,最近开发中收集的这篇文章主要介绍SM4算法前言一、SM4是什么?二、go语言实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 一、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 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))
}

最后

以上就是单纯冰淇淋为你收集整理的SM4算法前言一、SM4是什么?二、go语言实现的全部内容,希望文章能够帮你解决SM4算法前言一、SM4是什么?二、go语言实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部