Calcular o Checksum de um arquivo .bin

95 views
Skip to first unread message

Ulisses Piassa

unread,
Dec 8, 2016, 3:13:33 PM12/8/16
to lua...@googlegroups.com
Boa tarde galera, tudo blz?

Estou tentando calcular o checksum - muito simples! - de um arquivo .bin usando Lua.

Na mesma lógica usando C, eu usaria algo do tipo: Abrir o arquivo .bin e escrever em um vetor; ler o arquivo.bin e inseri-lo num buffer. Após isso, percorrer cada posição do buffer fazendo uma soma simples, acumulando-a em uma variável.

Alguém poderia me dar uma luz?

Valeu galera!

[]'s

Ulisses

Luiz Henrique de Figueiredo

unread,
Dec 8, 2016, 4:01:44 PM12/8/16
to lua...@googlegroups.com
> Estou tentando calcular o checksum - muito simples! - de um arquivo .bin
> usando Lua.
>
> Na mesma lógica usando C, eu usaria algo do tipo: Abrir o arquivo .bin e
> escrever em um vetor; ler o arquivo.bin e inseri-lo num buffer. Após isso,
> percorrer cada posição do buffer fazendo uma soma simples, acumulando-a em
> uma variável.
>
> Alguém poderia me dar uma luz?

local f = assert(io.open(filename,"b"))
local sum = 0
while true do
local c=f:read(1)
if c==nil then break end
sum=sum+c:byte()
end
f:close()

mas tem muitas outras checksums melhores:
https://en.wikipedia.org/wiki/Checksum
https://en.wikipedia.org/wiki/Cryptographic_hash_function
Message has been deleted
Message has been deleted

Denis Dos Santos Silva

unread,
Dec 9, 2016, 12:28:48 AM12/9/16
to Lua BR
Luiz, esse calculo funciona mesmo se o arquivo for muito grande? achei um solução interessante!

bem, já que o lua 5.2+ tem suporte a bit/bit32 veja algo no sentido de crc32, 24, 16, ... md5, sha1, ... aí já depende do que tem disponível !

https://github.com/lancelijade/qqwry.lua/blob/master/crc32.lua (pure lua, hash de string, mas, pra um arquivo ...
se você usa o luasec tem muita coisa (binding do openssl) -> https://github.com/brunoos/luasec

[...] 
-- pra ler de um arquivo
hash = func ( io.open('filename', 'rb'):read("*all") );

Ulisses Piassa

unread,
Dec 9, 2016, 8:30:11 AM12/9/16
to lua...@googlegroups.com
Galera, obrigado! Deu certo!

Luiz, essa solução que você mandou funcionou perfeitamente. Só tive que ajustar o parâmetro do io.open(filename) para "rb".

Valeu!! :D

[]'s

Ulisses

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+unsubscribe@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages