feat: 解决星图消息结构中CRC32 算法校验不通过问题并本地验证成功

This commit is contained in:
“DaisyWu” 2024-12-04 17:24:16 +08:00
parent 3e25831132
commit d1f12c62b9

View File

@ -2,6 +2,9 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:crc/crc.dart';
import 'package:crclib/catalog.dart';
import 'package:crypto/crypto.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bugly/flutter_bugly.dart';
@ -105,3 +108,54 @@ void findChineseCharacters(Directory directory) {
bool hasChineseCharacters(String input) {
return RegExp(r'[\u4e00-\u9fa5]').hasMatch(input);
}
//ToDo:
/**
* CRC16
void calculateCrc16() {
const String payload = 'hello';
// Uint8List
final Uint8List uint8Payload = stringToUint8List(payload);
// 使 CRC32
final int crc32Value = crc32Uint16(uint8Payload);
print('************ input 为 "$payload" 的 CRC32 值为 $crc32Value');
}
// Uint8List
Uint8List stringToUint8List(String input) {
return Uint8List.fromList(utf8.encode(input));
}
// CRC32
int crc32Uint16(Uint8List data) {
const int polynomial = 0xD5828281;
// CRC32
final List<int> table = List<int>.generate(256, (i) {
int crc = i;
for (int j = 0; j < 8; j++) {
if ((crc & 1) != 0) {
crc = (crc >> 1) ^ polynomial;
} else {
crc >>= 1;
}
}
return crc;
});
// CRC32
int crc = 0xFFFFFFFF;
for (final int byte in data) {
crc = (crc >> 8) ^ table[(crc ^ byte) & 0xFF];
}
crc ^= 0xFFFFFFFF;
// CRC32 16
return crc & 0xFFFF;
}
*/