Oracle SQL 将十六进制值选择为 SHA256
Posted
技术标签:
【中文标题】Oracle SQL 将十六进制值选择为 SHA256【英文标题】:Oracle SQL Select Hex value to SHA256 【发布时间】:2020-03-17 21:27:25 【问题描述】:表中有一个特定的列 (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(正则字符串)
但我>真的
【问题讨论】:
【参考方案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
【讨论】:
以上是关于Oracle SQL 将十六进制值选择为 SHA256的主要内容,如果未能解决你的问题,请参考以下文章