From 6e531151bc714498128c2c0453c90d61efaa5121 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Fri, 12 Sep 2025 15:09:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/Sm2DecryptCommand.php | 46 ------ app/Console/Commands/Sm2EncryptCommand.php | 136 ------------------ .../Controllers/Admin/BlacklistController.php | 12 +- .../Controllers/Admin/ConfigController.php | 13 +- .../Controllers/Admin/StudyAskController.php | 12 +- .../Controllers/Admin/StudyController.php | 12 +- .../Controllers/Admin/VisitAreaController.php | 12 +- .../Controllers/Admin/VisitController.php | 11 +- .../Controllers/Admin/VisitTimeController.php | 12 +- 9 files changed, 49 insertions(+), 217 deletions(-) delete mode 100644 app/Console/Commands/Sm2DecryptCommand.php delete mode 100644 app/Console/Commands/Sm2EncryptCommand.php diff --git a/app/Console/Commands/Sm2DecryptCommand.php b/app/Console/Commands/Sm2DecryptCommand.php deleted file mode 100644 index 985c5d8..0000000 --- a/app/Console/Commands/Sm2DecryptCommand.php +++ /dev/null @@ -1,46 +0,0 @@ -doDecrypt($cipher, $privateKey, true, $mode); - - if ($plain === '') { - $this->error('解密失败:C3 校验不通过或格式不匹配'); - return self::FAILURE; - } - - $this->line($plain); - return self::SUCCESS; - } catch (\Throwable $e) { - $this->error('SM2 解密异常:' . $e->getMessage()); - return self::FAILURE; - } - } -} - - diff --git a/app/Console/Commands/Sm2EncryptCommand.php b/app/Console/Commands/Sm2EncryptCommand.php deleted file mode 100644 index ae85637..0000000 --- a/app/Console/Commands/Sm2EncryptCommand.php +++ /dev/null @@ -1,136 +0,0 @@ -normalizePublicKeyToHex($publicKey); - - // RtSm2 缺省返回hex,且加密返回 c1c3c2 - $sm2 = new \Rtgm\sm\RtSm2('hex', true); - $cipherHex = $sm2->doEncrypt($message, $pubHex, $mode); - $this->line($cipherHex); - return self::SUCCESS; - } catch (\Throwable $e) { - $this->error('SM2 加密失败:' . $e->getMessage()); - return self::FAILURE; - } - } - - private function normalizePublicKeyToHex(string $key): string - { - $trimmed = trim($key); - // 如果已经是 128/130 长度的HEX,直接返回 - if (preg_match('/^(04)?[0-9a-fA-F]{128}$/', $trimmed)) { - return strtolower($trimmed); - } - - // 可能是 Base64(SPKI SubjectPublicKeyInfo) - $bin = base64_decode($trimmed, true); - if ($bin === false) { - throw new \InvalidArgumentException('公钥格式不支持:既不是HEX也不是Base64'); - } - - // 优先使用 OpenSSL 解析 SPKI,获取未压缩公钥点 - if (function_exists('openssl_pkey_get_public')) { - $pem = "-----BEGIN PUBLIC KEY-----\n" . chunk_split($trimmed, 64, "\n") . "-----END PUBLIC KEY-----\n"; - $res = @openssl_pkey_get_public($pem); - if ($res !== false) { - $details = openssl_pkey_get_details($res); - if ($details && isset($details['ec']) && isset($details['ec']['public_key'])) { - $pubBin = $details['ec']['public_key']; // binary starting with 0x04 - if ($pubBin !== '' && ord($pubBin[0]) === 0x04) { - return strtolower(bin2hex($pubBin)); - } - } - // 某些 PHP 版本可能在 key 索引中提供公钥 - if ($details && isset($details['key'])) { - // 再次从 details['key'](PEM)中提取 BIT STRING - $pem2 = $details['key']; - $clean = str_replace(["-----BEGIN PUBLIC KEY-----", "-----END PUBLIC KEY-----", "\r", "\n", " "], '', $pem2); - $bin2 = base64_decode($clean, true); - if ($bin2 !== false) { - $found = $this->extractUncompressedPointFromSpki($bin2); - if ($found !== null) { - return $found; - } - } - } - } - } - - // 退而求其次:直接从 SPKI 二进制中提取 BIT STRING(不下钻根 SEQUENCE,直接扫描 0x03 标签) - $found = $this->extractUncompressedPointFromSpki($bin); - if ($found !== null) { - return $found; - } - - throw new \RuntimeException('未找到公钥BIT STRING'); - } - - private function extractUncompressedPointFromSpki(string $spkiBin): ?string - { - $len = strlen($spkiBin); - for ($pos = 0; $pos < $len; $pos++) { - if (ord($spkiBin[$pos]) !== 0x03) { - continue; - } - $p = $pos + 1; - if ($p >= $len) - break; - $lenByte = ord($spkiBin[$p++]); - if (($lenByte & 0x80) === 0) { - $l = $lenByte; - } else { - $num = $lenByte & 0x7F; - if ($num === 0 || $p + $num > $len) { - continue; - } - $l = 0; - for ($i = 0; $i < $num; $i++) { - $l = ($l << 8) | ord($spkiBin[$p++]); - } - } - if ($p + $l > $len) { - continue; - } - if ($l < 2) { - continue; - } - $unusedBits = ord($spkiBin[$p]); - if ($unusedBits !== 0) { - continue; - } - $bitString = substr($spkiBin, $p + 1, $l - 1); - if ($bitString !== '' && ord($bitString[0]) === 0x04) { - return strtolower(bin2hex($bitString)); - } - } - return null; - } -} - - diff --git a/app/Http/Controllers/Admin/BlacklistController.php b/app/Http/Controllers/Admin/BlacklistController.php index afcecc2..510004c 100644 --- a/app/Http/Controllers/Admin/BlacklistController.php +++ b/app/Http/Controllers/Admin/BlacklistController.php @@ -7,6 +7,7 @@ use App\Models\Blacklist; use App\Helpers\ResponseCode; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Validator; /** * @OA\Tag( @@ -116,14 +117,15 @@ class BlacklistController extends BaseController */ public function save() { - $request = new BlacklistRequest(); - $request->setContainer(app()); - $request->setRedirector(app('redirect')); - + $formRequest = app(BlacklistRequest::class); DB::beginTransaction(); try { - $data = $request->validated(); $all = request()->all(); + $validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + $data = $validator->validated(); if (isset($all['id'])) { // 更新 diff --git a/app/Http/Controllers/Admin/ConfigController.php b/app/Http/Controllers/Admin/ConfigController.php index 4d3101b..70594ec 100644 --- a/app/Http/Controllers/Admin/ConfigController.php +++ b/app/Http/Controllers/Admin/ConfigController.php @@ -7,6 +7,7 @@ use App\Models\Config; use App\Helpers\ResponseCode; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Validator; /** * @OA\Tag( @@ -116,14 +117,16 @@ class ConfigController extends BaseController */ public function save() { - $request = new ConfigRequest(); - $request->setContainer(app()); - $request->setRedirector(app('redirect')); DB::beginTransaction(); try { - $data = $request->validated(); + $formRequest = app(ConfigRequest::class); $all = request()->all(); + $validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + $data = $validator->validated(); if (isset($all['id'])) { // 更新 @@ -195,4 +198,4 @@ class ConfigController extends BaseController } return $query; } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/Admin/StudyAskController.php b/app/Http/Controllers/Admin/StudyAskController.php index 148aa57..ec9dac4 100644 --- a/app/Http/Controllers/Admin/StudyAskController.php +++ b/app/Http/Controllers/Admin/StudyAskController.php @@ -8,6 +8,7 @@ use App\Models\Study; use App\Helpers\ResponseCode; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Validator; /** * @OA\Tag( @@ -118,14 +119,15 @@ class StudyAskController extends BaseController */ public function save() { - $request = new StudyAskRequest(); - $request->setContainer(app()); - $request->setRedirector(app('redirect')); - + $formRequest = app(StudyAskRequest::class); DB::beginTransaction(); try { - $data = $request->validated(); $all = request()->all(); + $validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + $data = $validator->validated(); if (isset($all['id'])) { // 更新 diff --git a/app/Http/Controllers/Admin/StudyController.php b/app/Http/Controllers/Admin/StudyController.php index 7553f4a..ff07af3 100644 --- a/app/Http/Controllers/Admin/StudyController.php +++ b/app/Http/Controllers/Admin/StudyController.php @@ -9,6 +9,7 @@ use App\Helpers\ResponseCode; use App\Models\StudyLog; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Validator; /** * @OA\Tag( @@ -149,14 +150,15 @@ class StudyController extends BaseController */ public function save() { - $request = new StudyRequest(); - $request->setContainer(app()); - $request->setRedirector(app('redirect')); - + $formRequest = app(StudyRequest::class); DB::beginTransaction(); try { - $data = $request->validated(); $all = request()->all(); + $validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + $data = $validator->validated(); if (isset($all['id'])) { // 更新 diff --git a/app/Http/Controllers/Admin/VisitAreaController.php b/app/Http/Controllers/Admin/VisitAreaController.php index e1008be..523783d 100644 --- a/app/Http/Controllers/Admin/VisitAreaController.php +++ b/app/Http/Controllers/Admin/VisitAreaController.php @@ -8,6 +8,7 @@ use App\Models\Admin; use App\Helpers\ResponseCode; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Validator; /** * @OA\Tag( @@ -116,14 +117,15 @@ class VisitAreaController extends BaseController */ public function save() { - $request = new VisitAreaRequest(); - $request->setContainer(app()); - $request->setRedirector(app('redirect')); - + $formRequest = app(VisitAreaRequest::class); DB::beginTransaction(); try { - $data = $request->validated(); $all = request()->all(); + $validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + $data = $validator->validated(); if (isset($all['id'])) { // 更新 diff --git a/app/Http/Controllers/Admin/VisitController.php b/app/Http/Controllers/Admin/VisitController.php index a62f910..46fa51d 100644 --- a/app/Http/Controllers/Admin/VisitController.php +++ b/app/Http/Controllers/Admin/VisitController.php @@ -145,14 +145,15 @@ class VisitController extends BaseController */ public function save() { - $request = new VisitRequest(); - $request->setContainer(app()); - $request->setRedirector(app('redirect')); - + $formRequest = app(VisitRequest::class); DB::beginTransaction(); try { - $data = $request->validated(); $all = request()->all(); + $validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + $data = $validator->validated(); // 检查黑名单 if (Config::isBlacklistCheckEnabled()) { diff --git a/app/Http/Controllers/Admin/VisitTimeController.php b/app/Http/Controllers/Admin/VisitTimeController.php index 0d1278e..20246a0 100644 --- a/app/Http/Controllers/Admin/VisitTimeController.php +++ b/app/Http/Controllers/Admin/VisitTimeController.php @@ -7,6 +7,7 @@ use App\Models\VisitTime; use App\Helpers\ResponseCode; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Validator; /** * @OA\Tag( @@ -116,14 +117,15 @@ class VisitTimeController extends BaseController */ public function save() { - $request = new VisitTimeRequest(); - $request->setContainer(app()); - $request->setRedirector(app('redirect')); - + $formRequest = app(VisitTimeRequest::class); DB::beginTransaction(); try { - $data = $request->validated(); $all = request()->all(); + $validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + $data = $validator->validated(); if (isset($all['id'])) { // 更新