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