Browse Source

fix:公私钥

duxin 1 năm trước cách đây
mục cha
commit
c4d4793bfb
4 tập tin đã thay đổi với 193 bổ sung0 xóa
  1. 169 0
      core/util/rsaEncDec.go
  2. 2 0
      etc/config.yaml
  3. 16 0
      etc/rsa_private_key.pem
  4. 6 0
      etc/rsa_public_key.pem

+ 169 - 0
core/util/rsaEncDec.go

@@ -0,0 +1,169 @@
+package util
+
+import (
+	log "app.yhyue.com/moapp/jylog"
+	"crypto/rand"
+	"crypto/rsa"
+	"crypto/x509"
+	"encoding/base64"
+	"encoding/pem"
+	"errors"
+	"fmt"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/os/gctx"
+	"io/ioutil"
+	"math/big"
+)
+
+var (
+	PublicKey    *rsa.PublicKey
+	PrivateKey   *rsa.PrivateKey
+	Displacement int64
+)
+
+func init() {
+	initPrivatePublicKey()
+}
+
+func initPrivatePublicKey() {
+	// 读取私钥文件
+	privateKeyBytes, err := ioutil.ReadFile("./etc/rsa_private_key.pem")
+	if err != nil {
+		log.Println("无法读取私钥文件:", err)
+		return
+	}
+
+	// 解码私钥
+	privateKeyBlock, _ := pem.Decode(privateKeyBytes)
+	if privateKeyBlock == nil || privateKeyBlock.Type != "PRIVATE KEY" {
+		log.Println("私钥文件格式错误")
+		return
+	}
+
+	// 解析私钥
+	privateKeys, err := x509.ParsePKCS8PrivateKey(privateKeyBlock.Bytes)
+	if err != nil {
+		log.Println("私钥解析失败:", err)
+		return
+	}
+
+	// 转换为RSA类型的私钥
+	rsaPrivateKey, ok := privateKeys.(*rsa.PrivateKey)
+	if !ok {
+		fmt.Println("无法转换为RSA类型的私钥")
+		return
+	}
+	PrivateKey = rsaPrivateKey
+
+	// 读取公钥文件
+	publicKeyBytes, err := ioutil.ReadFile("./etc/rsa_public_key.pem")
+	if err != nil {
+		log.Println("无法读取公钥文件:", err)
+		return
+	}
+
+	// 解码公钥
+	publicKeyBlock, _ := pem.Decode(publicKeyBytes)
+	if publicKeyBlock == nil || publicKeyBlock.Type != "PUBLIC KEY" {
+		log.Println("公钥文件格式错误", publicKeyBlock.Type)
+		return
+	}
+
+	// 解析公钥
+	publicKeyInterface, err := x509.ParsePKIXPublicKey(publicKeyBlock.Bytes)
+	if err != nil {
+		log.Println("公钥解析失败:", err.Error())
+		return
+	}
+
+	// 转换为公钥类型
+	rsaPublicKey, ok := publicKeyInterface.(*rsa.PublicKey)
+	if !ok {
+		log.Println("无法转换为公钥类型")
+		return
+	}
+	PublicKey = rsaPublicKey
+	Displacement = g.Cfg().MustGet(gctx.New(), "displacement").Int64()
+}
+
+// Encryption  wei加密
+func DisplacementEncryption(content string) (string, error) {
+	if content == "" {
+		return "", errors.New("加密内容为空")
+	}
+	plaintext := []byte(content)
+	if Displacement != 0 { // 位移处理的值
+		shiftValue := big.NewInt(Displacement)
+		PublicKey.E = int(shiftValue.Int64())
+	}
+	// 使用公钥加密数据
+	ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, PublicKey, plaintext)
+	if err != nil {
+		log.Println("加密失败:", err)
+		return "", err
+	}
+	return string(ciphertext), nil
+}
+
+func DisplacementDecryption(content string) (string, error) {
+	if content == "" {
+		return "", errors.New("解密内容为空")
+	}
+	if PrivateKey == nil {
+		return "", errors.New("无效私钥")
+	}
+	if Displacement != 0 {
+		exponent := big.NewInt(Displacement) // 位移处理的值
+		PrivateKey.D = new(big.Int).Mul(PrivateKey.D, exponent)
+	}
+	ciphertext, err := base64.StdEncoding.DecodeString(content)
+	if err != nil {
+		log.Println("密文解码失败:", err)
+		return "", errors.New("密文解码失败")
+	}
+
+	// 使用私钥解密数据
+	decryptedText, err := rsa.DecryptPKCS1v15(rand.Reader, PrivateKey, ciphertext)
+	if err != nil {
+		log.Println("解密失败:", err)
+		return "", err
+	}
+	return string(decryptedText), nil
+}
+
+// Encryption  加密
+func Encryption(content string) (string, error) {
+	if content == "" {
+		return "", errors.New("加密内容为空")
+	}
+	plaintext := []byte(content)
+	// 使用公钥加密数据
+	ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, PublicKey, plaintext)
+	if err != nil {
+		log.Println("加密失败:", err)
+		return "", err
+	}
+	return string(ciphertext), nil
+}
+
+func Decryption(content string) (string, error) {
+	if content == "" {
+		return "", errors.New("解密内容为空")
+	}
+	if PrivateKey == nil {
+		return "", errors.New("无效私钥")
+	}
+	ciphertext, err := base64.StdEncoding.DecodeString(content)
+	if err != nil {
+		log.Println("密文解码失败:", err)
+		return "", errors.New("密文解码失败")
+	}
+
+	// 使用私钥解密数据
+	decryptedText, err := rsa.DecryptPKCS1v15(rand.Reader, PrivateKey, ciphertext)
+	if err != nil {
+		log.Println("解密失败:", err)
+		return "", err
+	}
+	return string(decryptedText), nil
+}

+ 2 - 0
etc/config.yaml

@@ -135,3 +135,5 @@ outServer:
 noPowerUrlSwitch:
   '/succbi/nzj/app/nzj.app/nzj_detail_1.spg' : '/succbi/nzj/app/nzj.app/nzj_detail_0.spg'
   '/succbi/nzj/app/nzj.app/nzj_search_1.spg': '/succbi/nzj/app/nzj.app/nzj_search_0.spg'
+
+displacement: 123

+ 16 - 0
etc/rsa_private_key.pem

@@ -0,0 +1,16 @@
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOhM0pNOfGeiBr+t
+nunphCHReY3RiS4Fuc2nD3cbjKNdLezeViGmsZwHsb2SVUb6rpPHyX0+3xjXYn//
+n39/Q8uPjWRA332TtN8MDEkSR2HMbn8ufRRt2TnlfsFDFTgBywSP7cwd0CiEdvBX
+5w8Jifc9VbedwbeplBWyDeLLqjRjAgMBAAECgYB4es+EAuLWxNwHMb8Hxkr3VzNZ
+8GDbc7DIDmsg9TLdz4fwH+hAD7pyGDOBBJIh/AXrM2U3BhKjSaIWjLdmYtT/kzg8
+BxQDr9YoO7u2jvTcEE+/6p2YugYX/ngpinawFJqyM+N7Or8yRABaw6Aq8VuKtv6p
+980Y2BBVVYn+/KorYQJBAP+9lu8iolzKRzJrFt/rosdWkOpNg5ujcSCwbxhYnYC0
+UY85sPLsMvnLgegkpO8jocSAt586BmcsA+Q9o97qVCkCQQDoiSVegtOvG3U0mNlN
+rCVpPEL22s9Kkwps3ZCdTl3VtUtNiyfhE8rbw/qOGti3VxMCRhpKi9hTIgeq13UG
+67WrAkEA/WQ1c5XGd9f4eU1AKffInmf4SB8rgn+L7I7EVMQgstB3a0kHOXqs+3IX
+shL01PliJFhBF+QfSgSDipdEke9uGQJBAOcw46xxmhDw1bizdulYi+Fy/oj7xzi3
+tJfEObGMZpLBKtsvzThkOz4APS3n1yuBMO8Dz8PqAeu1W7YpfLqiwv0CQF68N244
+dFebDSoZLl1hbCExpbtC7SDBpYxlIVNVqwN7ymr+Z0rIcAMVv5Ldp/bJEWaXJs9C
+0sPCBpjDnyK9Z04=
+-----END PRIVATE KEY-----

+ 6 - 0
etc/rsa_public_key.pem

@@ -0,0 +1,6 @@
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDoTNKTTnxnoga/rZ7p6YQh0XmN
+0YkuBbnNpw93G4yjXS3s3lYhprGcB7G9klVG+q6Tx8l9Pt8Y12J//59/f0PLj41k
+QN99k7TfDAxJEkdhzG5/Ln0Ubdk55X7BQxU4AcsEj+3MHdAohHbwV+cPCYn3PVW3
+ncG3qZQVsg3iy6o0YwIDAQAB
+-----END PUBLIC KEY-----