首页 > 其他分享 >GSSM加解密

GSSM加解密

时间:2024-01-19 10:35:48浏览次数:29  
标签:return err nil GSSM sm4 加解密 sm2 byte

1、sm2

package crypto

import (
	"crypto/rand"

	"github.com/emmansun/gmsm/sm2"
)

func Sm2Decrypt(priKey, cipherText []byte) (plainText []byte, err error) {
	var pK *sm2.PrivateKey
	if pK, err = sm2.NewPrivateKey(priKey); err != nil {
		return
	}
	return sm2.Decrypt(pK, cipherText)
}

func Sm2Encrypt(priKey, plainText []byte) (cipherText []byte, err error) {
	var pK *sm2.PrivateKey
	if pK, err = sm2.NewPrivateKey(priKey); err != nil {
		return
	}
	return sm2.Encrypt(rand.Reader, &pK.PublicKey, plainText, nil)
}

  

2、sm4 ecb

package crypto

import (
	"github.com/emmansun/gmsm/cipher"
	"github.com/emmansun/gmsm/padding"
	"github.com/emmansun/gmsm/sm4"
)

func Sm4ECBDecrypt(key, data []byte) ([]byte, error) {
	c, err := sm4.NewCipher(key)
	if err != nil {
		return nil, err
	}
	pkcs7 := padding.NewPKCS7Padding(sm4.BlockSize)
	plaintext := make([]byte, len(data))
	decrypter := cipher.NewECBDecrypter(c)
	decrypter.CryptBlocks(plaintext, data)
	return pkcs7.Unpad(plaintext)
}

func Sm4ECBEncrypt(key, data []byte) ([]byte, error) {
	c, err := sm4.NewCipher(key)
	if err != nil {
		return nil, err
	}
	pkcs7 := padding.NewPKCS7Padding(sm4.BlockSize)
	ciphertext := pkcs7.Pad(data)
	encrypter := cipher.NewECBEncrypter(c)
	encrypter.CryptBlocks(ciphertext, data)
	return ciphertext, nil
}

  

 

参考:gmsm/cipher/ecb_sm4_test.go at main · emmansun/gmsm (github.com)

 

标签:return,err,nil,GSSM,sm4,加解密,sm2,byte
From: https://www.cnblogs.com/mango1997/p/17974073

相关文章

  • PHP加解密
    备注:此代码是需要配合php扩展mcrypt才可以使用的,如果觉得繁琐,可以使用openssl_encrypt方式,参考:https://www.cnblogs.com/ccdr/p/17596664.html /***敏感信息加密(仅服务端内部自己使用)*前提:必须安装对应的php扩展mcrypt后才可以使用*@paramstring$key......
  • java后台字符串URLencode、URLdecode及Base64加解密转换
    一、URLencode、URLdecode//将application/x-www-from-urlencoded字符串转换成普通字符串StringkeyWord=URLDecoder.decode("%E4%BD%A0%E5%A5%BD","utf-8");System.out.println(keyWord);//输出你好//将普通字符创转换成application/x-www......
  • MD5三种方式加密(16位大小、32位大小),Base64两种方式加解密
    MD5加密后的位数有两种:16位与32位。16位实际上是从32位字符串中取中间的第9位到第24位的部分,用Java语言来说,即:Stringmd5_16=md5_32.substring(8,24)Java实现md5加密有三种方式可供选择1.Spring自带DigestUtils(优点,方便,代码简洁,缺点只可进行MD5加密)spring自带jar包......
  • python 使用 rsa库进行RSA签名和加解密
     python使用rsa库进行RSA签名和加解密 #-*-coding:UTF-8-*-#!/usr/bin/envpythonimportbase64importrsafromrsaimportcommon#使用rsa库进行RSA签名和加解密classRsaUtil(object):PUBLIC_KEY_PATH='/tmp/gbzj/public_key.pem'#公钥P......
  • RC4加解密算法
    RC简介在密码学中,RC4(来自RivestCipher4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。 ......
  • java rsa加解密
    坑点:用其他语言的一定注意,Java秘钥和php秘钥不同,不用混用。  packagecn.muyan.monitoragent.utils.encrypt;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;importjavax.crypto.Cipher;importjava.io.IOException;importjava.security.*;i......
  • rdf-file:SM2加解密
    一:SM2简介SM2是中国密码学算法标准中的一种非对称加密算法(包括公钥和私钥)。SM2主要用于数字签名、密钥交换和加密解密等密码学。生成秘钥:用于生成一对公钥和私钥。公钥:用于加密数据和验证数字签名。私钥:用于解密数据和生成数字签名。数字签名:用于生成和验证数字签名,可以独立使用。......
  • Java加解密【回车换行】坑与解决
    在Java中进行加解密时,经常会遇到回车换行的问题,这可能导致加解密结果不符合预期,引发一系列的错误。本文将探讨在Java加解密中常见的回车换行问题,并提供解决方案,以确保数据的准确性和一致性。一、问题背景在文本数据进行加密时,回车换行字符可能会在不同的操作系统上表示方式不同。例......
  • 【APP小程序】微信小程序包解密+加解密算法JS逆向
    简介现如今大部分微信小程序抓包看到的数据均是加密的,无法通过常规的业务抓包进行测试,现通过对微信小程序包进行解密,获取到微信小程序源码对加解密算法进行分析。微信小程序解密小程序包默认路径:C:\Users\Administrator\Documents\WeChatFiles\Applet如不知道哪个是需要测试......
  • C# 使用AES实现简单的加解密
    加密://使用SHA-256哈希函数处理秘钥varhashedKey=GetSHA256Hash(publicKey);//加密varencryptString=EncryptStringToBytes_Aes(strs,hashedKey);staticstringGetSHA256Hash(stringinput){using(SHA256sha256=SHA256.Create()){byte......