kobe6258 7 月之前
父节点
当前提交
06515d2b75
共有 1 个文件被更改,包括 16 次插入21 次删除
  1. 16 21
      rpc/rpc.go

+ 16 - 21
rpc/rpc.go

@@ -21,6 +21,7 @@ import (
 	"google.golang.org/protobuf/proto"
 	"google.golang.org/protobuf/types/known/anypb"
 	"io"
+	"io/ioutil"
 	"log"
 	"time"
 )
@@ -40,7 +41,7 @@ func (d *DefaultRpcClient) WrapSign(request interface{}, doHandler func(ctx cont
 		utils.FileLog.Error("序列化请求失败:%v", err)
 		return
 	}
-	sign, _ := d.signature(string(reqStr), 16)
+	timestamp, nonce, sign, _ := d.signature(string(reqStr), 16)
 	ctx := metadata.NewOutgoingContext(context.Background(), metadata.Pairs(
 		"nonce", nonce,
 		"timestamp", fmt.Sprintf("%d", timestamp),
@@ -90,35 +91,33 @@ func (d *DefaultRpcClient) generateNonceStr(length int) (string, error) {
 }
 
 type encryptedRequest struct {
-	Message   []byte `json:"ciphertext"`
-	Nonce     string `json:"nonce"`     // 添加随机字符串
-	Timestamp int64  `json:"timestamp"` // 添加时间戳
+	Message   interface{} `json:"ciphertext"`
+	Nonce     string      `json:"nonce"`     // 添加随机字符串
+	Timestamp int64       `json:"timestamp"` // 添加时间戳
 }
 
-func (d *DefaultRpcClient) signature(req interface{}, nonceLen int) (encodedData string, err error) {
-	nonceStr, err := d.generateNonceStr(nonceLen)
+func (d *DefaultRpcClient) signature(req interface{}, nonceLen int) (timestamp int64, nonceStr string, encodedData string, err error) {
+	nonceStr, err = d.generateNonceStr(nonceLen)
 	if err != nil {
 		utils.FileLog.Error("随机字符串生成失败: %v", err)
 		return
 	}
-	message := req.(proto.Message)
-	reqData, _ := anypb.New(message)
-	reqBytes, _ := proto.Marshal(reqData)
+	timestamp = time.Now().UnixMilli()
 	// 构建加密后的数据结构
 	encryptedStruct := encryptedRequest{
-		Message:   reqBytes,
-		Nonce:     nonceStr,               // 添加随机字符串
-		Timestamp: time.Now().UnixMilli(), // 添加时间戳
+		Message:   req,
+		Nonce:     nonceStr,  // 添加随机字符串
+		Timestamp: timestamp, // 添加时间戳
 	}
 	entryData, err := json.Marshal(encryptedStruct)
 	if err != nil {
 		utils.FileLog.Error("序列化加密后的数据失败: %v", err)
 		return
 	}
-	fmt.Println(entryData)
+	fmt.Println(string(entryData))
 	// 使用私钥加密
 	var privateKey *rsa.PrivateKey
-	privateKey, err = d.parsePrivateKeyFromPEM([]byte("-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEA0Gh3c2fki27yLKMUPUqZhDa0vGRp01ca5Rbpd6RoZURIA4Ti\n1k/zf2jW0tJ1OUnkBiBtcfZ4d+6gPr1kdsdpxSjlV1PQfzaMtZg0ZKiHTw4xhJ+P\n/XCzIPJaUKAwKqb8U0gsXfZVcF0OEwWAgNxLzMhPlTiSAWaRUOumOHNexSRzG9UR\ny+v/UIVkuDXFwzb1aly93S0Elp7cDPQA0FCLqiwofnNdPTJ1BiXa1OO8UFXuV16H\nw0JeYdl+GWUf8Q4uTKUesclnBkLgOUaXSJQqfNwqSBj39H4vRTBKX1eiqhCwt3/l\nwBEpWW8YHkfEssclh0x2xf0714e/H3BuwLwdWwIDAQABAoIBAQCyQvkRfKcvYOnC\npoc0We/v+D8l+ZnPTO1TUQLH9JfbLsmOQQcqG18C9zDxSVU9eGeTmf8jgJfQtgrZ\nP3SEaNOe8fkhdi6b8ZPv7E28X67FPzW55CXsuY5uuv3ngu1QPl8L+WsBwCeaoe3c\n9VLSZhxsAFaaI7Y3fn0Dw1z9YimI47ZSHra1xo9JM9EZybVYi8HaIoame9fs+TaK\nulr5nDjuRqPFhvVGpa/+S0S75ArW4VKrWp97cQ3D1xw2Fz0jP3eHndCErTYhj8MB\n10AFCndNKEIrwMPN5M426TbBLJY0vcIPYg0v4lSzwwAhYnNNmxMmroRLnD22ohdf\n687g52vRAoGBAOy6iiJxqW1mLNDKtwANI2XJBnoHbh8lPR3ZYlNybLeR49dFC7Qw\n5pv//rMybvWNG8obacQ0GiLXmlaajXFrpL9K+7qkg4W1VvjCvUo/Qk7He/sLOiXW\n/HuAOKZOhuLBoOzbDjDBHYy+eXDjzgqCrHpnI0wZ8uLahSUeTNSSgiNjAoGBAOFf\nuLnIMeV5kaNssvz+2iZ2W3aEW90fgNz8gy3VwzEarEGo7nalcq9vODwFHQNlZuE5\nBdzYXWE8Fjn/yJLipPxGXzPvGyZP4qUKgN8Mek39RJqvV3Mgtt0WG6IZpo0E0by0\nTmThlI0xJzi4Px01ip6fdhlJJPPC+yFayLzqtIupAoGBAJf7DtIcPNUSgvUtIB31\nUWN4kyLnAEkYpEs0lA7U6H1WOXusRV5TAsrmqEOtvlUBWfUAcn/Xn2v9FYZCRUqq\n/CMf5csm8ZV3HbYpeFNhl5VyNuOuio9encxAPp5uzeRowYMvA8ZDRVBlvRu/9TkE\nOe1/p8ak5i3EczSoZlUXFlvXAoGBANx5N80G+0jx1Hd7Lt4wslhOEMuwT+3Rk86b\nd/iu1XSEE19oU1/eGoNk2i5dEjTwTeSmVAXn4/HrRhMXFrAa6Cui7B9yGa0xGRc7\nXzbUjhEdYq+wOGx35GwD5KR/U19BB60C9m3Z/+jf3O6vz45TgngKpw21cGDGrcXD\nefzV3imBAoGAI3Md0ap1zmLVpM8NLCA9JxPPQiQAq0VmCGrEjeEk+sVn09lkESdb\nVDiu0VNGfWKsY+7hUC1qjBQ1ZCR4NFkwD6QwBsovrni6rK3f/4qRRmP8ORK9ASIi\nKw8stl7KvZdCltTobaVPFA90s+zgUsr9W6Q+gUPv2I/rmFWqpbJRARc=\n-----END RSA PRIVATE KEY-----\n"))
+	privateKey, err = d.parsePrivateKeyFromPEM([]byte(""))
 	if err != nil {
 		utils.FileLog.Error("私钥解析失败: %v", err)
 		return
@@ -145,19 +144,15 @@ func (d *DefaultRpcClient) signature(req interface{}, nonceLen int) (encodedData
 
 // 解析RSA公钥
 func (d *DefaultRpcClient) parsePrivateKeyFromPEM(pemBytes []byte) (privateKey *rsa.PrivateKey, err error) {
-	block, _ := pem.Decode(pemBytes)
+	pemBlock, err := ioutil.ReadFile("./conf/rsa_private_key.pem")
+	block, _ := pem.Decode(pemBlock)
 	if block == nil {
 		utils.FileLog.Error("公钥解析失败")
 		return nil, errors.New("公钥解析失败")
 	}
-	pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
+	privateKey, err = x509.ParsePKCS1PrivateKey(block.Bytes)
 	if err != nil {
 		return nil, err
 	}
-
-	privateKey, ok := pubInterface.(*rsa.PrivateKey)
-	if !ok {
-		return nil, errors.New("RSA公钥格式错误")
-	}
 	return
 }