Oracle校验数据sha512加密

Oracle check data in sha512 encryption

我需要通过Oracle查询查询sha512加密的数据

示例查询:

SELECT * FROM text WHERE SHA512(id) = '$id'

Oracle 提供 DBMS_CRYPTO 包来处理加密和哈希。

您可以按照此查询中显示的方式合并 SHA 哈希计算并与某些字符串常量进行比较:

select *
from text t
where 
  lower(                           -- to guarantee same character case 

    rawtohex(                      -- convert hash to string representation  
      dbms_crypto.hash(            -- hash calculation function

        utl_raw.cast_to_raw(t.id), -- need to convert a string before passing it to 
                                   -- function in parameter because otherwise 
                                   -- it casted to RAW directly with hextoraw().

        6                          -- dbms_crypto.HASH_SH512 - for Oracle 12c only 
      )
    )
  )
  = 
  lower(                           -- to guarantee same character case   
    :some_id_sha2_const_parameter  -- parameter string to compare with
  ) 

不幸的是,由于缺乏支持,您无法处理 Oracle 11g 中的 SHA-512 哈希。但是使用 Oracle 12c 是可能的。

文档:
DBMS_CRYPTO package in Oracle 11g
DBMS_CRYPTO package in Oracle 12c

还有两件事您必须考虑:

  1. 确保源字符串的字符集相同,因为散列是根据二进制数据计算的。
  2. 从性能的角度来看,最好将预先计算的哈希值存储在数据库中的列中,对其进行索引,并将外部参数与存储在列中的值进行比较。