Como utilizar a LZMA SDK (7Zip)

Como utilizar a LZMA em C para encapsular as chamadas ao 7Zip em minha aplicação.

Primeiramente o que é a LZMA SDK?

LZMA SDK é o kit de desenvolvimento que prove documentação, exemplos, interfaces, bibliotecas e ferramentas para o uso do algoritmo de compactação LZMA em aplicações customizadas.

Quais são os suportes da LZMA SDK?

O SDK dá suporte para as seguinte linguagens C, C++, C# e Java. [+]

Licença

Como o próprio site diz, "LZMA SDK is placed in the public domain." e vai mais alem "Anyone is free to copy, modify, publish, use, compile, sell, or distribute the original LZMA SDK code, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means."
Sendo assim pode ficar tranquilo para utilizar a biblioteca tanto comercialmente como não comercialmente, pois não existem restrições.

Ambiente de desenvolvimento

Vou utilizar o Microsoft Visual Studio 2010 e SDK baixada diretamente do site [lzma].

O desafio

Entender como a SDK deve ser carregada e realizar as chamadas corretamente para produzir conteúdo comprimido e criptografado.

Preocupações

Temia pela qualidade do código da SDK, facilidade de extensão (compreensão) e falta de suporte. Sou fã de projetos open source e é admirável a força de algumas comunidades, contudo algumas ferramentas incríveis não tem grande penetração no mercado e acabam por não terem grandes comunidades experientes e ativas.

Escopo

Apesar do escopo não funcional ter sido bem claro, o funcional ainda permanecia com lacunas a preencher, pois as primeiras informações e que seria um arquivo com a extensão ".7z" e com criptografia AES. Depois de algumas conversas e cafés cheguei ao seguinte escopo:

  • Criar um executável para promover apenas a extração de arquivos gerados a partir do 7Zip;
  • O conteúdo será criptografado (AES), feature do próprio 7Zip, além dos nomes internos dos arquivos;
  • Atentar-se para o consumo de memória, pois serão arquivos com um grande volume de dados;
  • Prevenir o "man in the middle".

A imersão

Criei um novo projeto em meu RAD e extrai todo código da LZMA SDK e comecei avalia-lo em busca dos exemplos e utilitários. Aqui cabe uma  pause filosófica: "Avaliar o código desenvolvido por outra pessoa, acaba por revelar muito da cabeça desse programador, creio que é como visitar a casa de alguém", logo cabe a reflexão: Cuide bem de seu código, afinal ninguém gosta de ser recebido em um local bagunçado e sujo.
Foi uma grata surpresa a qualidade dos códigos e a estrutura do SDK, facilitou para logo já estar apto a produzir alguns exemplo e começar aprofundar o entendimento na lógica da ferramenta.

Dúvidas! 

Em casos normais de temperatura e pressão é difícil programar, compilar, testar e tudo funcionar já na primeira tentativa e esse projeto não fugiu a regra. Depois de algumas tentativas me vejo bloqueado e sem muitas alternativas, logo resolvo pedir ajuda e acabei recorrendo ao principal canal da ferramenta o fórum do projeto no site do SourceForge (7Zip - SourceForge). A grata surpresa foi perceber que o fórum funciona e que o próprio criador da ferramenta é muito solicito e um membro ativo. Sendo assim, se você estiver com dúvidas não pense duas vezes em compartilha-la no fórum, só não se esqueça de fazer uma busca para validar que não é um tema recorrente.

O SDK

 A estrutura do SDK é subdividida por linguagem e já vem pronto para ser importado por seu RAD preferido e assim você pode agilizar o início de seu desenvolvimento.
















Exemplos e utilitários

Durante minhas buscas na internet encontrei exemplos utilizando o C, o mesmo pode ser encontrado em (\C\Util\Lzma) e o arquivo chama-se LzmaUtil.c:


Exemplo do código fonte do utilitário, mas como podemos ver as opções são bem limitadas:
















Como definido no escopo, terei de realizar o unzip e o decrypt e como o código em C não possuiu as features necessárias, fui buscar uma alternativa e no fórum da ferramenta fui orientado a utilizar o CPP e mais especificadamente o utilitário Client7z.cpp:

















Aqui o exemplo do SDK descompactado e importado no meu RAD:




















Exemplo do código:








Conclusão

O SDK (LZMA) da ferramenta 7Zip é uma excelente alternativa para compactação e criptografia, um código de excelente qualidade, documentado e com uma comunidade ativa. Você pode acelerar seus projetos focando nos detalhes de sua customização e não precisa perder tempo recriando a roda.
Quando for imaginar a arquitetura de sua solução, você deve levar em conta os modos gráficos e de linha de comando da ferramenta, sendo que a customização pode focar apenas na abertura dos dados.

Comentários

Postagens mais visitadas deste blog

How use the LZMA SDK (7Zip)

How config Maven to work with NTLM proxy