初始化项目文件
This commit is contained in:
127
api_iris/utils/rsa.go
Normal file
127
api_iris/utils/rsa.go
Normal file
@ -0,0 +1,127 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/rsa"
|
||||
"crypto/x509"
|
||||
"encoding/base64"
|
||||
"github.com/sirupsen/logrus"
|
||||
"main/database"
|
||||
"main/model"
|
||||
"reflect"
|
||||
"time"
|
||||
)
|
||||
|
||||
func GetPrivateKeys(user string, date string) (model.DayKeys, error) {
|
||||
var resKey model.DayKeys
|
||||
//today := time.Now().Format("2006-01-02")
|
||||
db := database.GetInstance().GetMysqlDb()
|
||||
if err := db.Where("date = ? and user = ?", date, user).Order("id").First(&resKey).Error; err != nil {
|
||||
logrus.Errorln("sql执行失败:", err)
|
||||
}
|
||||
if reflect.DeepEqual(resKey, model.DayKeys{}) {
|
||||
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
|
||||
if err != nil {
|
||||
return model.DayKeys{}, err
|
||||
}
|
||||
x509PrivateKey := x509.MarshalPKCS1PrivateKey(privateKey)
|
||||
base64PrivateKey := base64.StdEncoding.EncodeToString(x509PrivateKey)
|
||||
resKey = model.DayKeys{
|
||||
Date: date,
|
||||
Key: base64PrivateKey,
|
||||
AesKey: NewKey(32),
|
||||
User: user,
|
||||
}
|
||||
if err1 := db.Create(&resKey).Error; err1 != nil {
|
||||
logrus.Errorln("sql执行失败:", err1)
|
||||
}
|
||||
logrus.Warnln(date + "resKey为空,创建resKey")
|
||||
return resKey, nil
|
||||
} else {
|
||||
if err := db.Where("date = ? and user = ? and id <> ?", date, user, resKey.ID).Delete(&model.DayKeys{}).Error; err != nil {
|
||||
logrus.Errorln("sql执行失败:", err)
|
||||
}
|
||||
}
|
||||
logrus.Infoln("resKey存在,返回私钥")
|
||||
return resKey, nil
|
||||
}
|
||||
|
||||
func GetPublicKey(user string) (string, error) {
|
||||
var userLogin model.User
|
||||
db := database.GetInstance().GetMysqlDb()
|
||||
if err := db.Where("username = ?", user).First(&userLogin).Error; err != nil {
|
||||
logrus.Errorln("sql执行失败:", err)
|
||||
}
|
||||
if userLogin.Date == "" {
|
||||
logrus.Infoln(user + ":用户之前未登录系统")
|
||||
userLogin.Date = time.Now().Format("2006-01-02")
|
||||
}
|
||||
sPrivateKey, err := GetPrivateKeys(user, userLogin.Date)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
deBase64privateKey, err := base64.StdEncoding.DecodeString(sPrivateKey.Key)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
privateKey, err := x509.ParsePKCS1PrivateKey(deBase64privateKey)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
publicKey := privateKey.PublicKey
|
||||
x509PublicKey, err := x509.MarshalPKIXPublicKey(&publicKey)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
base64PublicKey := base64.StdEncoding.EncodeToString(x509PublicKey)
|
||||
logrus.Infoln(user + ":获取公钥成功")
|
||||
return base64PublicKey, nil
|
||||
}
|
||||
|
||||
func RsaEncrypt(s string, user string) (string, error) {
|
||||
sPublicKey, err := GetPublicKey(user)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
deBase64Public, err := base64.StdEncoding.DecodeString(sPublicKey)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
publicKey, err := x509.ParsePKIXPublicKey(deBase64Public)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
res, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey.(*rsa.PublicKey), []byte(s))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return base64.StdEncoding.EncodeToString(res), nil
|
||||
}
|
||||
|
||||
func RsaDecrypt(s string, sPrivateKey string) (string, error) {
|
||||
//sPrivateKey, err := GetPrivateKeys(user)
|
||||
//if err != nil {
|
||||
// return "", err
|
||||
//}
|
||||
deBase64Private, err := base64.StdEncoding.DecodeString(sPrivateKey)
|
||||
if err != nil {
|
||||
logrus.Errorln("rsa私钥: base64 decode err:", err)
|
||||
return "", err
|
||||
}
|
||||
privateKey, err := x509.ParsePKCS1PrivateKey(deBase64Private)
|
||||
if err != nil {
|
||||
logrus.Errorln("rsa私钥: x509 decode err:", err)
|
||||
return "", err
|
||||
}
|
||||
des, err := base64.StdEncoding.DecodeString(s)
|
||||
if err != nil {
|
||||
logrus.Errorln("rsa: base64 decode err:", err)
|
||||
return "", err
|
||||
}
|
||||
res, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, des)
|
||||
if err != nil {
|
||||
logrus.Errorln("rsa: 解密失败:", err)
|
||||
return "", err
|
||||
}
|
||||
return string(res), nil
|
||||
}
|
Reference in New Issue
Block a user