Oracle SQL Select 十六进制值到 SHA256

Oracle SQL Select Hex value to SHA256

table 上有一个特定的列 (hex_values),其中所有值(字符串)均采用 base16 (HEX) 编码。

是否有可能 SELECT hex_values 的所有成员并带来已经 SHA256 散列的结果?

例如:

 -------------------------
|       HEX_VALUES        |
 -------------------------
| 70617373776f7264313233a | //password123 (HEX)
 -------------------------  
| 31323370617373776f7264a | //123password (HEX)
 ------------------------- 
| 6c6f72656d697073756d    | //loremipsum (HEX)
 ------------------------- 
| 6d7970617373776f7264    | //mypassword (HEX)
 ------------------------- 

而 SQL 查询将完成所有工作,就像这样(第 1 行示例):

70617373776f7264313233a(十六进制字符串)→ password123(常规字符串)→ sha256(password123)(巨型字符串)

所以这个 SQL 查询的结果将是:

 -------------------------
|       HEX_VALUES        |
 -------------------------
| sha256(password123)     | 
 -------------------------  
| sha256(123password)     | 
 ------------------------- 
| sha256(loremipsum)      | 
 ------------------------- 
| sha256(mypassword)      | 
 ------------------------- 

我知道我可以:

1) Select hex_values (Oracle SQL)

2) SQL 查询后:转换为常规字符串 → SHA256(常规字符串)

但我>真的<需要在不使用 Oracle 之外的任何其他源代码的情况下执行此操作 SQL。

在 Oracle 12 及更高版本中,字符串上有 standard_hash() function you could use. Use hextoraw(),然后将该值传递给 standard_hash()

SELECT standard_hash(hextoraw(hex_values), 'SHA256')
       FROM elbat;

顺便说一下,SHA256 是一种散列算法,而不是加密算法。所以没有 "SHA256 encrypted" 值这样的东西。

毕竟,这对我有用:

 SELECT 
    standard_hash(
      UTL_RAW.CAST_TO_VARCHAR2(HEXTORAW(HEX_VALUES)),
      'SHA256'
    ) 
    FROM ELBAT