I'm trying to verify the sha1 hash on a file download without saving it to
disk, and without buffering the whole thing. I think this solution might
buffer all the data into "content" before going into the eachByte loop. I
thought that was the reason for the DigestInputStream. Do you know if this
is correct?
Gerald R. Wiltse
jerrywiltse@gmail.com
On Fri, Mar 4, 2016 at 9:40 AM, Winnebeck, Jason <
Jason.Winnebeck@windstream.com> wrote:
> Here is how I would do it. I provide both a “short” solution and a “long”
> one. I would use the “short” solution if I was making for example a
> developer only tool and I knew I was only hashing small things for example
> a configuration file in a build script and want a one-liner. Otherwise I’d
> use the “long” version.
>
>
>
> //If the content is guaranteed to be short:
>
> def content = new ByteArrayInputStream("Here be dragons".bytes)
>
> println MessageDigest.getInstance("SHA1").digest(content.bytes).encodeHex()
>
>
>
> //If the content might be arbitrarily long:
>
> content = new ByteArrayInputStream("Here be dragons".bytes)
>
> def digest = MessageDigest.getInstance("SHA1")
>
> content.eachByte(4096) { bytes, len ->
>
> digest.update(bytes, 0, len)
>
> }
>
> println digest.digest().encodeHex()
>
>
>
> Jason
>
>
>
> *From:* Gerald Wiltse [mailto:jerrywiltse@gmail.com]
> *Sent:* Friday, March 04, 2016 9:18 AM
> *To:* users@groovy.apache.org
> *Subject:* Groovy Hash Calculations
>
>
>
> Hello All,
>
>
>
> I have this block, it's pretty compressed, just wondering if there is a
> more groovy way to handle reading the buffer and computing the hash.
>
>
>
> def messageDigest = MessageDigest.getInstance("SHA1")
>
> def dis = new DigestInputStream(content, messageDigest)
>
> byte[] buffer = new byte[1024];
>
> while (dis.read(buffer) != -1) {}
>
> def sha1Hex = new BigInteger(1,
> messageDigest.digest()).toString(16).padLeft(40, '0')
>
>
>
>
> Gerald R. Wiltse
> jerrywiltse@gmail.com
>
>
> ------------------------------
> This email message and any attachments are for the sole use of the
> intended recipient(s). Any unauthorized review, use, disclosure or
> distribution is prohibited. If you are not the intended recipient, please
> contact the sender by reply email and destroy all copies of the original
> message and any attachments.
>
|