SM4对称加密算法

SM4是我国采用的一种分组密码标准,有国家密码局与2012年3月21日发布,秘钥长度和分组长度为128位。

go语言中应用

简单版本:其函数接口中已实现分组密码底层接口的调用

func sm4Sample(){src := []byte("这是对称加密SM4的CBC模式加解密测试")key := []byte("1q2w3e4r5t6y7u8i")cipherText, err := sm4.Sm4Cbc(key, src, true)if err != nil {panic(err)}plainText, err := sm4.Sm4Cbc(key, cipherText, false)if err != nil {panic(err)}flag := bytes.Equal(src, plainText)fmt.Println("SM4快速实现加解密,数据填充标准为pksc7,是否解密成功:", flag)
}

复杂版本:自己实现数据填充和分组密码底层接口的调用

package mainimport ("crypto/cipher""github.com/tjfoc/gmsm/sm4"
)//明文数据填充
func paddingLastGroup(plainText []byte, blockSize int) []byte {//1.计算最后一个分组中明文后需要填充的字节数padNum := blockSize - len(plainText)%blockSize//2.将字节数转换为byte类型char := []byte{byte(padNum)}//3.创建切片并初始化newPlain := bytes.Repeat(char, padNum)//4.将填充数据追加到原始数据后newText := append(plainText, newPlain...)return newText
}//去掉明文后面的填充数据
func unpaddingLastGroup(plainText []byte) []byte {//1.拿到切片中的最后一个字节length := len(plainText)lastChar := plainText[length-1]//2.将最后一个数据转换为整数number := int(lastChar)return plainText[:length-number]
}func sm4Encrypt (plainText, key []byte) []byte {block, err := sm4.NewCipher(key)if err != nil {panic(err)}paddData := paddingLastGroup(plainText, block.BlockSize())iv := []byte("12345678qwertyui")blokMode := cipher.NewCBCEncrypter(block, iv)cipherText := make([]byte, len(paddData))blokMode.CryptBlocks(cipherText, paddData)return cipherText
}func sm4Dectypt(cipherText, key []byte) []byte {block, err := sm4.NewCipher(key)if err != nil {panic(err)}iv := []byte("12345678qwertyui")blockMode := cipher.NewCBCDecrypter(block, iv)blockMode.CryptBlocks(cipherText, cipherText)plainText := unpaddingLastGroup(cipherText)return plainText
}func main(){src := []byte("这是对称加密SM4的CBC模式加解密测试")key := []byte("1q2w3e4r5t6y7u8i")cipherText := sm4Encrypt(src, key)plainText := sm4Dectypt(cipherText, key)flag := bytes.Equal(src, plainText)fmt.Println("解密是否成功:", flag)
}

密码技术--国密SM4分组密码算法及Go语言应用相关推荐

  1. 国密SM4对称算法实现说明(原SMS4无线局域网算法标准)

    国密SM4对称算法实现说明(原SMS4无线局域网算法标准) SM4分组密码算法,原名SMS4,国家密码管理局于2012年3月21日发布:http://www.oscca.gov.cn/News/201 ...

  2. 密码技术--国密SM3哈希算法及Go语言应用

    SM3杂凑算法 sm3是我国国产的哈希算法,是一种密码散列函数标准,有国家密码管理局与2010年12月17日发布,该算法主要用于数字签名及验证,消息认证码生成及验证,随机数生成等,算法公开,其效率与s ...

  3. 密码技术--国密证书及go语言生成自签国密证书

    go语言生成自签证书文件(SM2) package mainimport ("crypto/rand""crypto/x509/pkix""encod ...

  4. 国密算法java语言的实现:利用bcprov和hutool库分别实现国密SM4算法工具类,对称密钥

    SM4算法成为行业标准: SM4分组密码算法是2012年3月21日实施的一项行业标准: 2021年6月25日,我国SM4分组密码算法作为国际标准ISO/IEC 18033-3:2010/AMD1:20 ...

  5. 国密SM4算法(简介与C源码)

    国密即国家密码局认定的国产密码算法,即商用密码. 国密算法是国家密码局制定标准的一系列算法.其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法.具体包括SM1,SM2,SM3,SM4等,其中:S ...

  6. java break 在if 中使用_java中使用国密SM4算法详解

    前言 上次总结了一下加密算法的分类(加密算法有集中形式,各有什么不同?),现在我们用java语言实现一下SM4:无线局域网标准的分组数据算法.对称加密,密钥长度和分组长度均为128位. ps:我们既可 ...

  7. java mac pos_pos终端mac国密(sm4)算法(java实现)

    概念理解 mac算法是(Message Authentication Codes 消息认证码算法),是含有密钥散列函数算法.主要通过异或运算,再配合其他加密算法实现mac值的运算,用于校验. 实现过程 ...

  8. 一个关于国密SM4的故事

    一个关于国密SM4的故事 我的名字叫SM4,我还有三位兄长,分别是大哥SM1, 二哥SM2, 和三哥SM3.说起我的名字,故事要回到2006年的时候,我出生的时候并不是叫SM4的,而是叫做SMS4.只 ...

  9. [转帖]一个关于国密SM4的故事

    一个关于国密SM4的故事 https://www.cnblogs.com/ouyida3/p/10053862.html SM1 硬件SM2 非对称加密SM3 hash算法SM4 对称加密 一个关于国 ...

最新文章

  1. 在线作图|差异柱状图(组内)
  2. SAP WM Storage Type Search配置里的Storage Class WPC标记
  3. python可以用break作为变量名_Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】...
  4. 飞思卡尔高级驾驶员辅助系统(ADAS)解决方案
  5. Swoole练习 Web
  6. 092_元素的几种宽度和高度
  7. tensorflow就该这么学--4(识别手写数字)
  8. Spring集成Shiro框架实战
  9. 如何将ipynb转换为html,md,pdf等格式
  10. suse redhat 查看系统版本
  11. quartz(6)--集群
  12. ISP与IAP的区别
  13. 获得picker选项的当前年月值_如果你用OPPO手机!千万记得开启开发者选项,手机性能大幅度提升...
  14. Javascript启动LINUX的x86模拟器
  15. Python中用numpy进行图片处理
  16. J2EE的13种核心技术简介
  17. 【Caffe】caffe框架讲解,解析修改caffemodel与prototxt
  18. 【CF633H】Fibonacci-ish II(权值线段树)(莫队)
  19. html文字效果简书,css3实现动态流光文字效果
  20. 【教程】jadx反编译工具的安装

热门文章

  1. java list addall源码_Java集合:ArrayList源码分析
  2. java 输出_使用IntelliJ IDEA2020.2.2 x64新建java项目并且输出Hello World
  3. 2022年年底前山东将打造30个以上绿色数据中心 逐步淘汰高能耗中小型数据中心...
  4. “春色满园”!谷歌新数据中心有望实现100%可再生能源
  5. 数据中心的运维管理原则(二)
  6. phpmyadmin忘记mysql密码_忘记phpmyadmin登录密码怎么办
  7. NLP:Transformer的架构详解之详细攻略(持续更新)
  8. AI开发者大会之语音语义技术实践与应用:2020年7月3日《NLP在教育行业的应用》、《AI防疫-语音语义技术在政务联络场景中的应用》、《智能客服机器人在售前导购场景中的应用实践》
  9. AI:2020年6月23日北京智源大会演讲分享之智能信息检索与挖掘专题论坛——09:55-10:40刘兵教授《Open-World AI and Continual Learning》
  10. Paper之ACLEMNLP:2009年~2019年ACL计算语言学协会年会EMNLP自然语言处理的经验方法会议历年最佳论文简介及其解读