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:
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
Postar um comentário