Oracle SQL将十六进制值选择为SHA256



表上有一个特定的列(hex_values(,其中所有值(字符串(都以16进制(hex(编码。

是否可以选择hex_value的所有成员,并将结果进行SHA256哈希处理?

例如:

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

SQL查询将完成所有的工作,如下所示(第1行示例(:

70617373776f7264313233a(字符串HEX(→password123(常规字符串(→sha256(密码123((巨大字符串(

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

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

我知道我可以:

1( 选择六进制值(Oracle SQL((_V(

2( SQL查询后:转换为正则字符串→SHA256(正则字符串(

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

在Oracle12及更高版本中,可以使用standard_hash()函数。对字符串使用hextoraw(),然后将该值传递给standard_hash()

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

顺便说一下,SHA256是一种散列算法,而不是加密算法。因此,不存在"SHA256加密"值这回事。

毕竟,这对我来说是有效的:

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

最新更新