| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- package service
- import (
- "bytes"
- "crypto/md5"
- "crypto/rand"
- "crypto_test/pkg/handle"
- "encoding/hex"
- "fmt"
- "log"
- "golang.org/x/crypto/sha3"
- "github.com/tjfoc/gmsm/sm2"
- "github.com/tjfoc/gmsm/sm3"
- "github.com/tjfoc/gmsm/x509"
- )
- func RSA() {
- content := "hello world"
- base64Sig, err := handle.RSASign([]byte(content), "./rsa_private_key.pem")
- if err != nil {
- fmt.Println("私钥签名失败:", err)
- return
- }
- fmt.Println("私钥签名结果:", base64Sig)
- err = handle.RSAVerify([]byte(content), base64Sig, "./rsa_public_key.pem")
- if err != nil {
- fmt.Println("验证签名失败:", err)
- } else {
- fmt.Println("签名验证成功")
- }
- }
- func SM2() {
- content := []byte("hello world")
- priv, err := sm2.GenerateKey(rand.Reader) // 生成密钥对
- if err != nil {
- log.Fatal(err)
- }
- pub := &priv.PublicKey
- ciphertxt, err := pub.EncryptAsn1(content, rand.Reader) //sm2加密
- if err != nil {
- log.Fatal(err)
- }
- fmt.Println("加密结果: ", ciphertxt)
- plaintxt, err := priv.DecryptAsn1(ciphertxt) //sm2解密
- if err != nil {
- log.Fatal(err)
- }
- if !bytes.Equal(content, plaintxt) {
- log.Fatal("原文不匹配")
- }
- sign, err := priv.Sign(rand.Reader, content, nil) //sm2签名
- if err != nil {
- log.Fatal(err)
- }
- isok := pub.Verify(content, sign) //sm2验签
- fmt.Printf("Verified: %v\n", isok)
- }
- // func GetKey2(){
- // priv, err := sm2.GenerateKey(rand.Reader) // 生成密钥对
- // if err != nil {
- // log.Fatal(err)
- // }
- // }
- func SM3() {
- content := []byte("hello world")
- h := sm3.New()
- h.Write([]byte(content))
- sum := h.Sum(nil)
- fmt.Printf("sm3 value is: %x\n", sum)
- }
- func MD5() {
- content := []byte("hello world")
- h := md5.New()
- h.Write(content)
- sum2 := hex.EncodeToString(h.Sum(nil))
- fmt.Printf("md5 value is: %x\n", sum2)
- }
- func GetKey() {
- // 生成 SM2 密钥对
- priv, err := sm2.GenerateKey(nil) // 使用 sm2 包生成密钥对
- if err != nil {
- return // 如果生成密钥对失败,直接返回
- }
- // 将私钥转换为 PEM 格式
- privPem, err := x509.WritePrivateKeyToPem(priv, nil) // 使用 x509 包将私钥转换为 PEM 格式
- if err != nil {
- log.Fatal(err) // 如果转换失败,记录错误并终止程序
- }
- // 将公钥转换为 PEM 格式
- publicPem, err := x509.WritePublicKeyToPem(&priv.PublicKey) // 使用 x509 包将公钥转换为 PEM 格式
- if err != nil {
- log.Fatal(err) // 如果转换失败,记录错误并终止程序
- }
- // 从 PEM 格式中恢复公钥
- publicKeyFromPem, err := x509.ReadPublicKeyFromPem([]byte(publicPem)) // 使用 x509 包从 PEM 格式恢复公钥
- if err != nil {
- log.Fatal(err) // 如果恢复失败,记录错误并终止程序
- }
- // 打印压缩后的公钥的十六进制表示
- fmt.Println("pubkey", hex.EncodeToString(sm2.Compress(publicKeyFromPem))) // 使用 sm2 包对公钥进行压缩,并打印其十六进制表示
- // 从 PEM 格式中恢复私钥
- privateKeyFromPem, err := x509.ReadPrivateKeyFromPem([]byte(privPem), nil) // 使用 x509 包从 PEM 格式恢复私钥
- if err != nil {
- log.Fatal(err) // 如果恢复失败,记录错误并终止程序
- }
- // 打印私钥的 D 参数的十六进制表示
- fmt.Println("privkey", hex.EncodeToString(privateKeyFromPem.D.Bytes())) // 打印私钥的 D 参数(私钥的核心部分)的十六进制表示
- }
- func SHA3(ctx string) {
- h := sha3.New256() // 可以选择SHA3-224、SHA3-256、SHA3-384或SHA3-512
- // 写入数据 可以多次调用Write()方法,逐步写入数据
- h.Write([]byte(ctx))
- // 计算哈希值
- hash := h.Sum(nil)
- // 打印哈希值(以十六进制格式)
- fmt.Printf("SHA-3-256: %x\n", hash)
- // 也可以直接使用Sum256函数
- data := []byte(ctx)
- hash2 := sha3.Sum256(data)
- fmt.Printf("SHA-3-256: %x\n", hash2)
- }
|