Abinitio中无法解码SHA256哈希值的问题求助
Abinitio哈希值解码问题解决方案
首先明确:SHA256这类哈希函数是单向不可逆的,你根本没法从哈希值还原出原始的十进制值,这是哈希算法的核心特性——就是用来让数据只能正向生成哈希,不能逆向还原的。
你当前代码的问题
你写的解码逻辑完全搞错方向了:
- 你对已有的
valHash又做了一次SHA256哈希,再去解码Base64,这和原始的十进制值半毛钱关系都没有,得到NULL太正常了。 - 编码时你是拿原始
val做SHA256哈希,再Base64编码;但哈希是单向的,这个过程根本没法逆向走。
正确的关联操作方案
既然你要基于哈希值做关联,正确的路子是:
- 把需要关联的原始十进制值拿过来,用和之前编码完全一样的逻辑生成哈希值
- 用这个新生成的哈希值,和你存储的
valHash做匹配关联
举个例子,如果你有另一批带原始val的数据,要和存valHash的文件关联,可以这么写代码:
out :: reformat(in) = begin -- 生成和之前一致的哈希值 out.generated_valHash :: string_replace(encode_base64(hash_SHA256(in.val)),'\n',''); out.* :: in.*; end;
之后把这个generated_valHash和目标文件的valHash做join操作就行。
重要提醒
如果你的场景里只有valHash,没有原始的十进制值,那绝对没办法还原出原始值,哈希算法从设计上就没给逆向解码留路子。
内容的提问来源于stack exchange,提问作者charmander
相关产品推荐
相关产品推荐

