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

ATM Pin encryption using 3DES