Midrange News for the IBM i Community


Posted by: Bob Cozzi
Rogue Programmer
Cozzi Productions, Inc.
Chicagoland
SQL iQuery Documentation - UDF and UDTF
has no ratings.
Published: 14 Jun 2019
Revised: 20 Jun 2019 - 487 days ago
Last viewed on: 19 Oct 2020 (193 views) 
  1. SQL iQuery - RUNiQRY CL Command
  2. CSV() - Read and Parse Comma Separated Values File
  3. CSV_VAL() Extract CSV Column Value
  4. CSV_XXXX() Extract CSV Column Value as xxxx
  5. CSV_COUNT - Retrieve Field Count
  6. ObjExist - Check Object Exits
  7. DTAARA - Data Area
  8. encode_URL Encode URL for the Web
  9. encode_TAG Encode HTML TAG Content
  10. FLDLIST - List the Fields of a Table
  11. FROMHEX - Fold 2-hex Chars into 1 Char
  12. GET CPUCNT, CURLIB, ENV, SRLNBR, SYSNAME
  13. MD5_HASH - UDF - Return MD5 Hash
  14. ifsStat - Get IFS File Attributes
  15. ifsExists - Check if IFS File Exists
  16. ifsFile - Query Contents of IFS Text File
  17. ifsDIR - List IFS Directory Entires
  18. DEPFILE - List Dependent Database Relations
  19. JOB - Get Job Name Component
  20. Job_ATTR - Job Attributes
  21. JOB_DATE Retrieve the Job Date
  22. JOBLOG - Write Message to Joblog
  23. Library List UDF and Procedures
  24. MBRLIST - Member List
  25. MCHINFO Machine Type and Model Number and OS version
  26. OSVER and OSVRM Get IBM i Version/Release
  27. PrintPDF - Print a PDF to a PDF Compatible Printer
  28. CPYTOPDF - Copy SPOOLED File to PDF file
  29. OBJ_LIST List Object in a Library
  30. LIB_LIST List Descriptions of Libraries on the Library List
  31. OBJ_EXPORTS List Exported Items from an Object
  32. OBJ_STRUCT Retrieve Objects Components
  33. RTVCMDD Retrieve Command Definition
  34. RTVJOBA - Retrieve Job Attributes
  35. RTVJOBD - Retrieve Job Description
  36. RTVLASTSPLF - Retrieve ID of Last SPOOLED File for this Job
  37. RTVxxx - Retrieve Various Objects Description Table Functions
  38. WATCHLIST - List Current Watches
  39. Polymorphic Qualified Name Syntax

Using IBM i? Need to create Excel, CSV, HTML, JSON, PDF, SPOOL reports? Learn more about the fastest and least expensive tool for the job: SQL iQuery.

iQuery.MD5_Hash() MD5_BINARY() - UDF Published by: Bob Cozzi on 14 Jun 2019 view comments

Generate MD5 Hash Value

The iQuery.MD5_XXXX() UDF create the Message Digest Hash ("MD5") for the input value. The result is a 16-byte message digest that is unique for the input value. Changing even one bit of any bytes of the input string generates an entirely different message digest result.

UDF Return Type Description
MD5_HASH varchar(32) The message digest is converted from the 16-byte value into a 32-byte hexadecimal value. The reason is that the 32-byte values is text friendly while the 16-byte message digest is considered "binary" data.
MD5_BINARY varbinary(16) The message digest is returned as it binary 16-byte format. Note that unreadable characters may be returned and this value should only be stored and/or processed, and should not be displayed or printed as it will send low-level binary data to the output device.

The MD5_XXXX functions convert the input string from the job CCSID into UTF-8 (CCSID 1208) and then apply the MD5 hash to that data. This is to keep the MD5 results consistent between operating system platforms. For example all MD5 Hash results on Windows and Apple Mac OS will be in ASCII. the iQuery MD5 Hash produces results consistent with those ASCII platforms, by converting the EBCDIC input value into UTF-8 before processing it with the ND5 algorithm.

Parameters

iQuery.md5_hash( input-value varchar(4096) );

The input-value is limilted to 4096 and this is an abritrary length since most MD5 Hash routines are used to obscure passwords, email addresses, and credit card codes. The result is always the 32-byte MD5 hash in hexadecimal format (for MD5_HAS) or the 16-byte binary form (for MD5_BINARY). But the parameter is the same for both.

Example

exec sql values iQuery.md5_hash( :pwd ) INTO :pwdHash;
exec sql select 1 into :Found from webUserDB
WHERE usrPwd = iQuery.MD5_Binary( :pwd )
FETCH FIRST ROW ONLY;
if (sqlState < '02000' and found = 1); // Password matches! :)
// continue normally
else;
// password failed, try again?
endif;

 

Return to midrangenews.com home page.
Sort Ascend | Descend

COMMENTS