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 ...