소스 검색

加密传输

chuckchen 1 년 전
부모
커밋
768da19424
3개의 변경된 파일47개의 추가작업 그리고 1개의 파일을 삭제
  1. 7 0
      package-lock.json
  2. 1 0
      package.json
  3. 39 1
      proxy.js

+ 7 - 0
package-lock.json

@@ -9,6 +9,7 @@
       "version": "1.0.0",
       "license": "ISC",
       "dependencies": {
+        "crypto": "^1.0.1",
         "express": "^4.18.2",
         "http-proxy-middleware": "^2.0.6"
       }
@@ -129,6 +130,12 @@
       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
       "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
     },
+    "node_modules/crypto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/crypto/-/crypto-1.0.1.tgz",
+      "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==",
+      "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in."
+    },
     "node_modules/debug": {
       "version": "2.6.9",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
   "author": "",
   "license": "ISC",
   "dependencies": {
+    "crypto": "^1.0.1",
     "express": "^4.18.2",
     "http-proxy-middleware": "^2.0.6"
   }

+ 39 - 1
proxy.js

@@ -1,5 +1,26 @@
 const express = require('express');
 const { createProxyMiddleware } = require('http-proxy-middleware');
+const crypto = require('crypto');
+
+const algorithm = 'aes-256-cbc';
+const key = crypto.randomBytes(32);
+const iv = crypto.randomBytes(16);
+
+// 解密函数
+function decryptData(data, key, iv) {
+  const decipher = crypto.createDecipheriv(algorithm, key, iv);
+  let decrypted = decipher.update(data, 'hex', 'utf8');
+  decrypted += decipher.final('utf8');
+  return decrypted;
+}
+
+// 加密函数
+function encryptData(data, key, iv) {
+  const cipher = crypto.createCipheriv(algorithm, key, iv);
+  let encrypted = cipher.update(data, 'utf8', 'hex');
+  encrypted += cipher.final('hex');
+  return encrypted;
+}
 
 const app = express();
 
@@ -10,8 +31,25 @@ const proxyOptions = {
     pathRewrite: { '^/api': '' }
 };
 
+// 自定义中间件:代理前操作
+const preProxyMiddleware = (req, res, next) => {
+  console.log('代理请求前操作');
+  // 在这里可以执行一些操作,如记录请求信息、修改请求头等
+  req.body = decryptData(req.body, key, iv);
+  next();
+};
+
+// 自定义中间件:代理后操作
+const postProxyMiddleware = (req, res, next) => {
+  console.log('代理响应后操作');
+  // 在这里可以执行一些操作,如记录响应信息、修改响应数据等
+  req.body = encryptData(req.body, key, iv)
+  next();
+};
+
+
 // 设置代理
-app.use('/api', createProxyMiddleware(proxyOptions));
+app.use('/api', preProxyMiddleware, createProxyMiddleware(proxyOptions), postProxyMiddleware);
 
 // 启动服务器
 const PORT = process.env.PORT || 3001;