Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev3.0.0

crclib

Coleção de rotinas de verificação de redundância cíclica (CRC) como conversores do Dart.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
162 mil
Curtidas
16
Pontos Pub
140

Instalar pacote

flutter pub add crclib

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

crclib é um pacote Dart que fornece uma coleção de rotinas de verificação de redundância cíclica (CRC) como conversores, projetadas para verificação eficiente da integridade dos dados. Ele suporta múltiplos algoritmos CRC e se integra perfeitamente em aplicações Flutter em Android, iOS, Web, macOS, Windows e Linux. O pacote é ideal para validar a consistência dos dados em transferências de arquivos, comunicações de rede e sistemas embarcados. Com baixo custo computacional e uso simples, o crclib permite que desenvolvedores implementem validação de soma de verificação robusta com facilidade.

Casos de uso

  • Verificações de integridade de dados em transferências de arquivos
  • Validação de pacote de rede
  • verificação de dados de sistema embarcado
  • Geração de soma de verificação para atualizações de firmware
  • Integridade do fluxo de dados em tempo real
  • Cálculos CRC multiplataforma

Principais recursos

  • Suporta múltiplos algoritmos CRC
  • Conversores leves e rápidos
  • Compatibilidade multiplataforma
  • Integração simples da API
  • Casos de teste embutidos
  • design de algoritmo extensível

Indicado para

  • Desenvolvedores que precisam de validação confiável de CRC
  • Aplicações que exigem verificações de consistência de dados
  • Projetos multiplataforma com necessidades de integridade
  • Desenvolvimento de firmware e software embarcado
  • Implementações de protocolo de rede

Considerações

  • Garanta a seleção correta do algoritmo CRC para o caso de uso
  • Verifique o formato dos dados de entrada antes do processamento
  • Não adequado para hashing criptográfico
  • Impacto no desempenho em grandes fluxos de dados
  • Limitado a casos de uso específicos do CRC
  • Requer manipulação cuidadosa de arrays de bytes

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

Dart crclib

This is not an official Google product.

Generic CRC calculations as Dart converters and some common algorithms.

To calculate the CRC value of any message

The easiest way to use this library is to call convert on the instance of the desired CRC routine.

  Crc32Xz().convert(utf8.encode('123456789')) == 0xCBF43926

Another supported use case is as stream transformers.

  File(...).openRead().transform(Crc32Xz()).single.then(...)

Instead of using predefined classes, it is also possible to construct a customized CRC function with ParametricCrc class. For a list of known CRC routines, check out https://reveng.sourceforge.io/crc-catalogue/all.htm.

TODO:

  1. inputReflected and outputReflected can be different, see CRC-12/UMTS.
  2. Bit-level checksums (including non-multiple-of-8 checksums).

To flip bits to obtain desired CRC values

With CrcFlipper, one can call flipWithData or flipWithValue depending on whether they have access to the message, or only its calculated CRC value. The snippet below is taken from test/flipper_test.dart.

      var inputMessage =
          'flipping lowercases to uppercases like mama pig making hot pancakes '
          'for daddy pig in peppa pig cartoon';
      // Mark the lower/upper-case bit in each character.
      // 0x61 = 'a' = 0110 0001
      //                | <-- 5th bit, zero-indexed
      // 0x41 = 'A' = 0100 0001
      var positions = inputMessage.codeUnits
          .asMap()
          .entries
          .where((e) => e.value >= 0x61 && e.value < 0x61 + 26)
          .map((e) => e.key * 8 + 5)
          .toSet();
      var flipper = CrcFlipper(Crc64());
      var solution = flipper.flipWithData(inputMessage.codeUnits, positions,
          CrcValue(BigInt.parse('DEADBEEFCAFEBABE', radix: 16)))!;
      var tmp = List.of(inputMessage.codeUnits, growable: false);
      solution.forEach((bitPosition) {
        var mask = 1 << (bitPosition % 8);
        tmp[bitPosition ~/ 8] ^= mask;
      });
      var outputMessage = String.fromCharCodes(tmp);
      expect(
          outputMessage,
          'flIPpiNG LOWErcAsEs To uPpERcaseS LIkE mAmA Pig mAKInG hOT paNcAKEs '
          'For DAdDY pig in peppa pig cartoon');

The detailed algorithm is documented in flipping_algorithm.md.

Categorias

Dependências

Lista de dependências 2 itens

Repositório-fonte

Projetos que usam este pacote