加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang实现md5、RSA、base64 加密解密

发布时间:2020-12-16 18:14:47 所属栏目:大数据 来源:网络整理
导读:package toolsimport ("crypto/md5""crypto/rand""crypto/rsa""crypto/x509""encoding/base64""encoding/hex""encoding/pem""errors")const (base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")var coder = base64.NewEnco
package tools

import (
	"crypto/md5"
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/base64"
	"encoding/hex"
	"encoding/pem"
	"errors"
)

const (
	base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
)

var coder = base64.NewEncoding(base64Table)

func Base64Encode(src []byte) []byte {
	return []byte(coder.EncodeToString(src))
}

func Base64Decode(src []byte) ([]byte,error) {
	return coder.DecodeString(string(src))
}

func RsaEncrypt(origData []byte,publicKey string) ([]byte,error) {
	block,_ := pem.Decode([]byte(publicKey))
	if block == nil {
		return nil,errors.New("public key error")
	}
	pubInterface,err := x509.ParsePKIXPublicKey(block.Bytes)
	if err != nil {
		return nil,err
	}
	pub := pubInterface.(*rsa.PublicKey)
	return rsa.EncryptPKCS1v15(rand.Reader,pub,origData)
}

func RsaDecrypt(ciphertext []byte,privateKey string) ([]byte,_ := pem.Decode([]byte(privateKey))
	if block == nil {
		return nil,errors.New("private key error!")
	}
	priv,err := x509.ParsePKCS1PrivateKey(block.Bytes)
	if err != nil {
		return nil,err
	}
	return rsa.DecryptPKCS1v15(rand.Reader,priv,ciphertext)
}

func Md5Encrypt(data string) string {
	md5Ctx := md5.New()                            //md5 init
	md5Ctx.Write([]byte(data))                     //md5 updata
	cipherStr := md5Ctx.Sum(nil)                   //md5 final
	encryptedData := hex.EncodeToString(cipherStr) //hex_digest
	return encryptedData
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读