首页 > 其他分享 >课设第三周进展

课设第三周进展

时间:2022-11-27 20:35:58浏览次数:79  
标签:err nil fmt 第三周 进展 go func 课设 byte

课设第三周进展

课设任务:进行C语言库的寻找

1.tjfoc-gm算法库

下载对应的安装包

在官网找到对应的安装包(https://golang.google.cn/dl/)
下好包之后直接unzip安装就好

配置环境变量

我们需要配置2个环境变量分别是 GOROOT 和 PATH。
为了方便以后的使用,需要把这几个环境变量添加profile文件中(~/.bash_profile 或 /etc/profile)。如果是单用户使用,可以将环境变量添加在 home 目录下的 bash_profile 文件中,如果是多用户使用,需要添加在 /etc/profile 文件。(推荐大家在 /etc/profile 文件中设置环境变量)
如下图修改即可

修改完成后可以在任意目录下输入go env查看go语言版本等详细信息

调通测试支持国密算法的基于go语言的算法库tjfoc-gm

首先证明SM系列可以完成


之后为了可以编译Go代码,先要进行go mod init gmtest(项目名)
项目下会自动创建 go.mod等文件

然后用go get从github里下好库

但是这里会出现一个下载很慢的问题,这里需要换一个代理即可


下载库之后查看go.mod会有如下变化

之后输入如下代码main.go


package main

import (
	"bytes"
	"crypto/cipher"
	"crypto/rand"
	"fmt"
	"log"

	"github.com/Hyperledger-TWGC/tjfoc-gm/sm2"
	"github.com/Hyperledger-TWGC/tjfoc-gm/sm3"
	"github.com/Hyperledger-TWGC/tjfoc-gm/sm4"
)

func main() {
	SM2()

	SM3()

	SM4()
}

func SM2() {
	priv, err := sm2.GenerateKey(rand.Reader) // 生成密钥对
	if err != nil {
		log.Fatal(err)
	}
	msg := []byte("Tongji Fintech Research Institute")
	pub := &priv.PublicKey
	ciphertxt, err := sm2.Encrypt(pub, msg, rand.Reader)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("SM2加密密文是:", string(msg))
	fmt.Printf("SM2加密结果是:%x\n", ciphertxt)
	
	plaintxt, err := priv.Decrypt(nil, ciphertxt, nil)
	if err != nil {
		log.Fatal(err)
	}
	if !bytes.Equal(msg, plaintxt) {
		log.Fatal("原文不匹配")
	}

	sign, err := priv.Sign(rand.Reader, msg, nil)
	if err != nil {
		log.Fatal(err)
	}

	isok := priv.PublicKey.Verify(msg, sign)
	fmt.Printf("SM2 Verified: %v\n", isok)
}

func SM3() {
	data := "test"
	h := sm3.New()
	h.Write([]byte(data))
	sum := h.Sum(nil)
	fmt.Printf("SM3 digest value is: %x\n", sum)
}

func SM4() {
	// 128比特密钥
	key := []byte("1234567890abcdef")
	// 128比特iv
	iv := make([]byte, sm4.BlockSize)
	data := []byte("Tongji Fintech Research Institute")
	fmt.Println("SM4加密密文是:", string(data))
	ciphertxt, err := sm4Encrypt(key, iv, data)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("SM4加密结果: %x\n", ciphertxt)

	res, err := sm4Decrypt(key, iv, ciphertxt)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("SM4解密结果: %x\n", res)
	fmt.Println("SM4解密密文是:", string(res))
}

func sm4Encrypt(key, iv, plainText []byte) ([]byte, error) {
	block, err := sm4.NewCipher(key)
	if err != nil {
		return nil, err
	}
	blockSize := block.BlockSize()
	origData := pkcs5Padding(plainText, blockSize)
	blockMode := cipher.NewCBCEncrypter(block, iv)
	cryted := make([]byte, len(origData))
	blockMode.CryptBlocks(cryted, origData)
	return cryted, nil
}

func sm4Decrypt(key, iv, cipherText []byte) ([]byte, error) {
	block, err := sm4.NewCipher(key)
	if err != nil {
		return nil, err
	}
	blockMode := cipher.NewCBCDecrypter(block, iv)
	origData := make([]byte, len(cipherText))
	blockMode.CryptBlocks(origData, cipherText)
	origData = pkcs5UnPadding(origData)
	return origData, nil
}

// pkcs5填充
func pkcs5Padding(src []byte, blockSize int) []byte {
	padding := blockSize - len(src)%blockSize
	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
	return append(src, padtext...)
}

func pkcs5UnPadding(src []byte) []byte {
	length := len(src)
	if length == 0 {
		return nil
	}
	unpadding := int(src[length-1])
	return src[:(length - unpadding)]
}

之后用go run运行main.go即可

gitee链接

https://gitee.com/cloud-in/national-secret-store/tree/master/张奕博第三周代码

标签:err,nil,fmt,第三周,进展,go,func,课设,byte
From: https://www.cnblogs.com/sanfeng-ooo/p/16930526.html

相关文章

  • 课设第三周进度
    学习进展本周学习并安装配置了两个JavaScript语言下的密码算法库一、Node.js+gm-crypto博客链接Node.js+gm-crypto二、sm-crypto博客链接sm-crypto......
  • 课设-Debug
    @目录2022.11.26LikePurple1、javafx包无法识别原因1:Javafx包未导入lib文件夹原因2:JDK版本过高,取消javafx包nullnullnullnullnull课设运行遇到的问题2022.11.26LikePur......
  • JSP课设:学生选课系统(附源码+调试)
    JSP学生选课管理系统学生选课管理系统功能概述(1)登录模块分为两种角色:学生角色、教师角色(2)教师模块:选课管理功能为对课程信息(课程编号、名称、学分)进行添加、修改、删除操......
  • 第三周课程设计进展——基于java语言的国密算法库编译测试
    本周计划完成的任务本周实际完成情况(代码,文档,程序运行截图...),未完成计划的原因?如何改进?本周遇到的问题与解决过程(要详细)本周计划完成的任务给openeuler配置java......
  • 报告分享|青源会:2022年人工智能重要方向进展与未来展望报告
    报告链接:http://tecdat.cn/?p=30489青源会举办了青源学术年会及一系列学术研讨活动,邀请自然语言处理、智能信息检索与挖掘、计算机视觉、智能体系结构与芯片、机器学习数......
  • Jenkins服务器的部署与简单使用(第三周)
    Jenkins安装安装依赖:https://www.jenkins.io/zh/doc/book/installing/    #CPU、内存、磁盘安装Java8、在2.361.1及以上版本开始要求Java11:aptinstallopenj......
  • 课设第二周
    本周计划完成的任务为寻找国密算法库,学习调用基本知识。我们寻找到了国密算法库gmssl(C语言),并尝试调用sm3和sm4算法本周实际完成截图如下gmssl安装sm4sm3代......
  • 课设第一周进展
    任务完成情况根据制定计划本周应完成wolfSSL和tiycrypt两个密码算法库的配置安装和使用,但在经过实践之后发现这两个库并非属于支持国密算法的密码库,故自己另寻了其他库来......
  • 课设第一周进展(wolfssl)
    一、wolfssl安装wolfssl简介wolfSSL嵌入式SSL库是一个用ANSIC编写的轻量级SSL/TLS库,针对嵌入式,RTOS和资源受限的环境-主要是因为它的体积小,速度快,功能集小......
  • 课设第一周进展(babassl)
    一、安装babasslbabassl简介BabaSSL是一款轻巧、灵活且靠谱的密码学和TLS协议工具集。BabaSSL是蚂蚁集团和阿里集团的各主要业务中所使用的底层密码库,现在开源出来供业......