require 'digest' # From activestorage def compute_checksum_in_chunks(io) Digest::MD5.new.tap do |checksum| while chunk = io.read(5242880) checksum << chunk end io.rewind end.base64digest end path = ARGV[0] puts "Path: #{path}" puts "Chunks: " + compute_checksum_in_chunks(File.open(path)) puts "MD5.file: " + Digest::MD5.file(path).base64digest puts "openssl md5 | base64: " + `openssl md5 -binary #{path} | base64` puts "python: " + `python -c 'import hashlib; import base64; print(base64.b64encode(hashlib.md5(open("#{path}").read()).digest()))'` # https://tools.ietf.org/html/rfc2045#section-6.8