Compute a hash value from a BDL string
How to compute a hash value of a BDL string using the security.Digest API.
Program Example
This retrieves the hash value from the signature and returns it. The computed hash value is encoded in Base64, so you may have additional conversion to do.
Program example ComputeHash.4gl
:
IMPORT SECURITY
MAIN
DEFINE result STRING
IF num_args() != 2 THEN
DISPLAY "Usage: ComputeHash <string> <hashcode>"
DISPLAY " string: the string to digest"
DISPLAY " hashcode: SHA1, SHA512, SHA384, SHA256, SHA224, MD5"
ELSE
LET result = ComputeHash(arg_val(1), arg_val(2))
IF result IS NOT NULL THEN
DISPLAY "Hash value is: ",result
ELSE
DISPLAY "Error"
END IF
END IF
END MAIN
FUNCTION ComputeHash(toDigest, algo)
DEFINE toDigest, algo, result STRING
DEFINE dgst security.Digest
TRY
LET dgst = security.Digest.CreateDigest(algo)
CALL dgst.AddStringData(toDigest)
LET result = dgst.DoBase64Digest()
CATCH
DISPLAY "ERROR : ", status, " - ", sqlca.sqlerrm
EXIT PROGRAM(-1)
END TRY
RETURN result
END FUNCTION
Example execution:
$ fglrun ComputeHash "Hello World" SHA1
$ Hash value is: Ck1VqNd45QIvq3AZd8XYQLvEhtA=