Components All New MacOS Windows Linux iOS
Examples Mac & Win Server Client Guides Statistic FMM Blog Deprecated Old

Hash.Digest

Calculates a hash of a value.

Component Version macOS Windows Linux Server iOS SDK
Hash 4.1 ✅ Yes ✅ Yes ✅ Yes ✅ Yes ✅ Yes
MBS( "Hash.Digest"; Algorithm; InputType; InputData; InputEncoding; OutputType { ; OutputInfo } )   More

Parameters

Parameter Description Example Flags
Algorithm Which algorithm to use.
Can be MD4, MD5, SHA, SHA1, MDC2, RIPEMD160, SHA224, SHA256, SHA384 or SHA512.
"SHA512"
InputType The type of input.
Can be Text, Image, Path, PDF, Data, base64 or Hex.
"Text"
InputData The actual input data.
Text, container or file path.
"Hello World"
InputEncoding The text encoding for text input.
Parameter is ignored for other cases.
Possible encoding names: ANSI, ISO-8859-1, Latin1, Mac, Native, UTF-8, DOS, Hex, Base64 or Windows. More listed in the FAQ.
"UTF-8"
OutputType The output type.
Can be Base64, Hex, Text, File, Path.
Added Base64URL as option for plugin version 10.3.
"Hex"
OutputInfo The addition info for output.
For text it is the text encoding, for file container the file name and for path the actual native file path.
"" Optional

Result

Returns error or hash.

Description

Calculates a hash of a value.
Input can be one of different types:
  • Text, you pass "text", your text and the text encoding. If no or invalid encoding name is passed, the native one is used. The encoding can be one of the following strings: ansi, windows, mac, latin1, utf8, dos or native.
  • PDF, you pass the container with the PDF file inside.
  • Image, you pass the container with an image file (JPEG, GIF, TIFF, PNG, PICT).
  • Data, you pass container and plugin looks for the file data inside.
  • Hex, you pass a hex encoded text.
  • Base64, you pass a base64 encoded text.
  • Path, you pass the file path to a file to read.
  • Container, you pass a container which is packed with all its content.
Now for output we can return the digest in various ways:
  • Text, we return the hash as text in the encoding. This is not recommended for hash values. OutputInfo parameter is text encoding.
  • Base64, the hash is returned as base64 encoded text.
  • Hex, the hash is returned as hex encoded text.
  • File, the hash is returned as a container value with a file inside containing the hash. OutputInfo parameter is the filename to be stored in the container value.
  • Path, the hash is written to a file. In the OutputInfo parameter you provide a native file path.
  • JPEG, a container with a JPEG image.
  • GIF, a container with a GIF image.
  • TIFF, a container with a TIFF image.
  • PNG, a container with a PNG image.

Possible digest engines:
DSA-SHA, DSA, MD5, MDC2, RIPEMD160, SHA, SHA1, SHA224, SHA256, SHA384 or SHA512.

This function requires a native path. Use Path.FileMakerPathToNativePath to convert a FileMaker path to a native path if required. If you like to have the user choose the path, you can use FileDialog functions.
For Server be aware that server has limited permissions and may not be able to access all files on a computer.

Examples

Calculate MD5 from text:

MBS( "Hash.Digest"; "MD5"; "Text"; "Hello World"; "UTF-8"; "Hex"; "" )

Calculate SHA512 from image in container and encode it as base64:

MBS( "Hash.Digest"; "SHA512"; "Image"; MyTable::MyContainer; ""; "Base64"; "" )

Hash of PDF in container:

MBS( "Hash.Digest"; "SHA512"; "PDF"; MyTable::MyContainer; ""; "Hex"; "" )

Hash a file with MD5:

MBS( "Hash.Digest"; "MD5"; "Path"; "/Users/cs/Desktop/test.fmp12"; ""; "Hex"; "" )

Stream file to AWS:

# Build a path to file (local) and in AWS
Set Variable [ $Filename ; Value: "test.pdf" ]
Set Variable [ $Path ; Value: "/" & $BucketName & "/PDF/" & $Filename ]
Set Variable [ $localPath ; Value: "/Users/cs/Desktop/license.pdf" ]
# calculate hash for file to upload
Set Variable [ $HashedPayload ; Value: Lower(MBS( "Hash.Digest"; "sha256"; "path"; $localPath; ""; "hex" )) ]
# upload
Set Variable [ $curl ; Value: MBS("CURL.New") ]
# file content is streamed
Set Variable [ $result ; Value: MBS("CURL.OpenInputFile"; $curl; $localPath) ]
# setup AWS
Set Variable [ $result ; Value: MBS("CURL.SetupAWS"; $curl; $AWSAccessKeyId; $AWSSecretAccessKey; $Region; $Service; $Path; $Domain; $Verb; $HashedPayload; $headers) ]
Set Field [ CURL Test::Result ; MBS("CURL.Perform"; $curl) ]
Set Field [ CURL Test::debug ; MBS("CURL.GetDebugMessages"; $curl) ]
Set Variable [ $result ; Value: MBS("CURL.Release"; $curl) ]

Use SHA-3:

MBS( "Hash.Digest"; "RSA-SHA3-256"; "Text"; "Hello World"; "UTF-8"; "Hex"; "" )

Example result: E167F68D6563D75BB25F3AA49C29EF612D41352DC00606DE7CBD630BB2665F51

Calculate x5t for a certificate file:

Let ( [
// read PEM file
cert = MBS( "X509.ReadFromFile"; "/Users/cs/Downloads/Cert.pem" );
// write DER file
data = MBS( "X509.Write"; cert; 1 );
// and free memory
r = MBS( "X509.Release"; cert );
// hash it to get x5t
hash = MBS( "Hash.Digest"; "SHA1"; "Base64"; data; ""; "base64url")
]; hash )

See also

Release notes

Example Databases

Blog Entries

This function checks for a license.

Created 18th August 2014, last changed 14th March 2024


Hash.CRC32 - Hash.DigestFile