50 lines
1.5 KiB
Text
50 lines
1.5 KiB
Text
/* NetRexx */
|
|
options replace format comments java crossref savelog symbols binary
|
|
|
|
import java.security.MessageDigest
|
|
|
|
SHA256('Rosetta code', '764faf5c61ac315f1497f9dfa542713965b785e5cc2f707d6468d7d1124cdfcf')
|
|
|
|
return
|
|
|
|
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
method SHA256(messageText, verifyCheck) public static
|
|
|
|
algorithm = 'SHA-256'
|
|
digestSum = getDigest(messageText, algorithm)
|
|
|
|
say '<Message>'messageText'</Message>'
|
|
say Rexx('<'algorithm'>').right(12) || digestSum'</'algorithm'>'
|
|
say Rexx('<Verify>').right(12) || verifyCheck'</Verify>'
|
|
if digestSum == verifyCheck then say algorithm 'Confirmed'
|
|
else say algorithm 'Failed'
|
|
|
|
return
|
|
|
|
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
method getDigest(messageText = Rexx, algorithm = Rexx 'MD5', encoding = Rexx 'UTF-8', lowercase = boolean 1) public static returns Rexx
|
|
|
|
algorithm = algorithm.upper
|
|
encoding = encoding.upper
|
|
|
|
message = String(messageText)
|
|
messageBytes = byte[]
|
|
digestBytes = byte[]
|
|
digestSum = Rexx ''
|
|
|
|
do
|
|
messageBytes = message.getBytes(encoding)
|
|
md = MessageDigest.getInstance(algorithm)
|
|
md.update(messageBytes)
|
|
digestBytes = md.digest
|
|
|
|
loop b_ = 0 to digestBytes.length - 1
|
|
bb = Rexx(digestBytes[b_]).d2x(2)
|
|
if lowercase then digestSum = digestSum || bb.lower
|
|
else digestSum = digestSum || bb.upper
|
|
end b_
|
|
catch ex = Exception
|
|
ex.printStackTrace
|
|
end
|
|
|
|
return digestSum
|