1 Star 0 Fork 164

yufan/go-gin-api

forked from 新亮/go-gin-api 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
rsa.go 1.64 KB
一键复制 编辑 原始数据 按行查看 历史
新亮 提交于 4年前 . upgrade
package rsa
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/base64"
"encoding/pem"
)
var _ Public = (*rsaPub)(nil)
var _ Private = (*rsaPri)(nil)
type Public interface {
i()
// Encrypt 加密
Encrypt(encryptStr string) (string, error)
}
type Private interface {
i()
// Decrypt 解密
Decrypt(decryptStr string) (string, error)
}
type rsaPub struct {
PublicKey string
}
type rsaPri struct {
PrivateKey string
}
func NewPublic(publicKey string) Public {
return &rsaPub{
PublicKey: publicKey,
}
}
func NewPrivate(privateKey string) Private {
return &rsaPri{
PrivateKey: privateKey,
}
}
func (pub *rsaPub) i() {}
func (pub *rsaPub) Encrypt(encryptStr string) (string, error) {
// pem 解码
block, _ := pem.Decode([]byte(pub.PublicKey))
// x509 解码
publicKeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return "", err
}
// 类型断言
publicKey := publicKeyInterface.(*rsa.PublicKey)
//对明文进行加密
encryptedStr, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, []byte(encryptStr))
if err != nil {
return "", err
}
//返回密文
return base64.URLEncoding.EncodeToString(encryptedStr), nil
}
func (pri *rsaPri) i() {}
func (pri *rsaPri) Decrypt(decryptStr string) (string, error) {
// pem 解码
block, _ := pem.Decode([]byte(pri.PrivateKey))
// X509 解码
privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
return "", err
}
decryptBytes, err := base64.URLEncoding.DecodeString(decryptStr)
//对密文进行解密
decrypted, _ := rsa.DecryptPKCS1v15(rand.Reader, privateKey, decryptBytes)
//返回明文
return string(decrypted), nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/yyufan/go-gin-api.git
git@gitee.com:yyufan/go-gin-api.git
yyufan
go-gin-api
go-gin-api
master

搜索帮助