From e6b90d9651b665a7ee0a31159b3df09491c57401 Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 12 Feb 2025 10:49:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8Dios=E7=AD=BE=E5=90=8D?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/talk/starChart/handle/other/do_sign.dart | 45 +++++++++++++++----- pubspec.yaml | 2 +- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/lib/talk/starChart/handle/other/do_sign.dart b/lib/talk/starChart/handle/other/do_sign.dart index 5466012d..631831ab 100644 --- a/lib/talk/starChart/handle/other/do_sign.dart +++ b/lib/talk/starChart/handle/other/do_sign.dart @@ -11,6 +11,31 @@ import 'package:star_lock/talk/starChart/exception/start_chart_message_exception class DoSign { // 生成签名sing + // Future generateSign({ + // required int currentTimestamp, + // required String privateKeyHex, + // }) async { + // String resultSign = ''; + // try { + // // 1. 将 32 位时间戳以小端字节序编码为二进制数据 + // Uint8List signData = encodeTimestampToLittleEndianBytes(currentTimestamp); + // + // // 2.将十六进制字符串转换为字节数组 + // List privateKeyBytes = hexToBytes(privateKeyHex); + // + // // 3.将私钥转换为 PEM 格式 + // final pemPrivateKey = + // convertToPemPrivateKey(privateKeyBytes, isPKCS8: true); + // // 4.签名 + // var result = await fastRsa.RSA + // .signPKCS1v15Bytes(signData, fastRsa.Hash.SHA256, pemPrivateKey); + // resultSign = hex.encode(result); + // } catch (e) { + // throw StartChartMessageException('❌--->上报信息生成签名时出现错误: $e'); + // } + // return resultSign ?? ''; + // } + Future generateSign({ required int currentTimestamp, required String privateKeyHex, @@ -20,20 +45,20 @@ class DoSign { // 1. 将 32 位时间戳以小端字节序编码为二进制数据 Uint8List signData = encodeTimestampToLittleEndianBytes(currentTimestamp); - // 2.将十六进制字符串转换为字节数组 - List privateKeyBytes = hexToBytes(privateKeyHex); + // 2. 加载私钥 + final privateKey = loadPrivateKey(privateKeyHex); - // 3.将私钥转换为 PEM 格式 - final pemPrivateKey = - convertToPemPrivateKey(privateKeyBytes, isPKCS8: true); - // 4.签名 - var result = await fastRsa.RSA - .signPKCS1v15Bytes(signData, fastRsa.Hash.SHA256, pemPrivateKey); - resultSign = hex.encode(result); + // 3. 创建 RSA 签名器 + final signer = pc.RSASigner(pc.SHA256Digest(), '0609608648016503040201'); + signer.init(true, pc.PrivateKeyParameter(privateKey)); + + // 4. 生成签名 + final signature = signer.generateSignature(signData); + resultSign = hex.encode(signature.bytes); } catch (e) { throw StartChartMessageException('❌--->上报信息生成签名时出现错误: $e'); } - return resultSign ?? ''; + return resultSign; } // 将 32 位时间戳以小端字节序编码为二进制数据 diff --git a/pubspec.yaml b/pubspec.yaml index 048f8ae5..034f7829 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -187,7 +187,7 @@ dependencies: #加密解密 encrypt: ^5.0.1 crypto: ^3.0.3 - pointycastle: ^3.4.0 + pointycastle: ^3.7.3 # 使用最新版本 date_format: ^2.0.7 # 下拉刷新