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 |
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.
- 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
- CURL.OpenInputFile
- CURL.Perform
- CURL.SetupAWS
- Encryption.Cipher
- GMImage.Hash
- Hash.SHA1
- Path.FileMakerPathToNativePath
- X509.Read
- X509.ReadFromFile
- X509.Release
Release notes
- Version 14.2
- Added parameter for Hash.DigestFile to update progress dialog.
- Version 10.3
- Added Base64URL as output option for RSA.Sign, CURL.ReceiveData, Files.ReadFile, Hash.DigestFile, Hash.Digest, Encryption.Cipher and for other functions as text encoding parameter.
- Version 9.5
- Fixed crash in Hash.Digest function when passing invalid file path for file.
- Version 9.2
- Added Hash.DigestFile function to calculate hashes of big files.
Example Databases
- CURL/Amazon S3/Amazon S3 Upload File
- Encryption and Hash/AES with PHP/AES with PHP
- Encryption and Hash/Hash Digest
- SmartCard/Belgian EID Reader
- Third Party/FileMaker Snippet Storage
Blog Entries
- MBS FileMaker Plugin, version 10.3pr1
- MBS FileMaker Plugin, version 9.5pr3
- Comparing Base Elements Plugin to MBS FileMaker Plugin
- AES in FileMaker and PHP
- New universal Hash and Encrypt functions for MBS FileMaker Plugin
- MBS Filemaker Plugin, version 4.1pr2
This function checks for a license.
Created 18th August 2014, last changed 14th March 2024