【问题标题】:Oracle SQL Select Hex value to SHA256Oracle SQL 将十六进制值选择为 SHA256
【发布时间】:2023-03-27 17:07:01
【问题描述】:

表中有一个特定的列 (hex_values),其中所有值(字符串)都是 base16 (HEX) 编码的。

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

例如:

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

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

70617373776f7264313233a(十六进制字符串)→密码123(常规字符串)→sha256(密码123)(巨字符串)

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

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

我知道我可以:

1) 选择 hex_values (Oracle SQL)

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

但我>真的

【问题讨论】:

    标签: sql oracle hex oracle-sqldeveloper sha256


    【解决方案1】:

    在 Oracle 12 及更高版本中,您可以使用 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(NAME)), 'SHA256' ) FROM ELBAT
    【解决方案2】:

    毕竟,这对我有用:

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

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 2011-08-04
      • 2018-01-22
      • 1970-01-01
      相关资源
      最近更新 更多