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:[email protected]]
Sent: Friday, March 04, 2016 9:18 AM
To: [email protected]
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
[email protected]<mailto:[email protected]>
----------------------------------------------------------------------
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.