first commit
This commit is contained in:
131
pkg/rsa/rsa.go
Normal file
131
pkg/rsa/rsa.go
Normal file
@ -0,0 +1,131 @@
|
||||
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()
|
||||
EncryptURLEncoding(encryptStr string) (string, error)
|
||||
Encrypt(encryptStr string) (string, error)
|
||||
}
|
||||
|
||||
type Private interface {
|
||||
i()
|
||||
|
||||
Decrypt(decryptStr string) (string, error)
|
||||
DecryptURLEncoding(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.StdEncoding.EncodeToString(encryptedStr), nil
|
||||
}
|
||||
|
||||
func (pub *rsaPub) EncryptURLEncoding(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.StdEncoding.DecodeString(decryptStr)
|
||||
|
||||
//对密文进行解密
|
||||
decrypted, _ := rsa.DecryptPKCS1v15(rand.Reader, privateKey, decryptBytes)
|
||||
|
||||
//返回明文
|
||||
return string(decrypted), nil
|
||||
}
|
||||
|
||||
func (pri *rsaPri) DecryptURLEncoding(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
|
||||
}
|
Reference in New Issue
Block a user