SHA-1 Hashing in Oracle Database 10g
As mentioned earlier, the MD5 protocol is not considered sufficiently secure for modern data protection, and SHA-1 is often used instead. SHA-1 is not available in the DBMS_OBFUSCATION_TOOLKIT, but in Oracle Database 10g, you can use the HASH function available in the DBMS_CRYPTO package to perform SHA-1 hashing . Here is the declaration of the function:
DBMS_CRYPTO.hash ( src in raw, typ in pls_integer) return raw;
Because HASH accepts only the RAW datatype as input, I have to convert the input character string to RAW using the technique described earlier for encryption.
l_in := utl_i18n.string_to_raw (p_in_val, 'AL32UTF8');
This converted string can now be passed to the hash function.
In the second parameter typ (which must be declared in the PLS_INTEGER datatype ) you specify the algorithm to use for hashing. You can select any of the algorithms in Table 4-7.
Constant |
Description |
DBMS_CRYPTO.HASH_MD5 |
Message Digest 5 |
DBMS_CRYPTO.HASH_MD4 |
Message Digest 4 |
DBMS_CRYPTO.HASH_SH1 |
Secure Hashing Algorithm 1 |
For example, to get the hash value for a RAW datatype variable, you might write a function as follows:
/* File on web: get_sha1_hash_val.sql */ CREATE OR REPLACE FUNCTION get_sha1_hash_val (p_in RAW) RETURN RAW IS l_hash RAW (4000); BEGIN l_hash := DBMS_CRYPTO.HASH (src => p_in, typ => DBMS_CRYPTO.hash_sh1); RETURN l_hash; END; /
For MD5 hashing, you would change the value of the parameter typ ...
Get Oracle PL/SQL for DBAs now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.