一个hash不是一个意见,为什么Google BigQuery sha 512函数输出与OpenSSL不一致?
- *SELECT SHA 512(“Hello World”)的Google BigQuery输出;**
LHT9F+2v2A6ER7DUZ0HuJDt+t03SFJoKsbkkb7MDgvJ+hT2FhXGeDmfL2g2qj1FnEGRhXWRa4nrLFb+xRH9Fmw==
SELECT SHA2(“Hello World”,512);和echo -n“Hello World”的OpenSSL输出|sha 512 sum两者都产生:2c74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459b
即使是base64的输出也与BigQuery的有很大的不同:SELECT TO_BASE64(SHA2(“Hello World”,512));MmM3NGZkMTdlZGFmZDgwZTg0NDdiMGQ0Njc0MWVlMjQzYjdlYjc0ZGQyMTQ5YTBhYjFiOTI0NmZi MzAzODJmMjdlODUzZDg1ODU3MTllMGU2N2NiZGEwZGFhOGY1MTY3MTA2NDYxNWQ2NDVhZTI3YWNi MTViZmIxNDQ3ZjQ1OWI=
3条答案
按热度按时间agyaoht71#
添加一些额外的细节@Georg Richter和@Simon Goater回答:
根据google cloud文档,SHA 512()使用SHA-512算法计算输入的哈希值,输出返回为
64 bytes
。根据我的理解,输出之间的差异是由于返回类型的格式。如果您的要求是为bigquery和echo命令获取相同的哈希值。你可以考虑使用下面的echo命令:echo -n "Hello World" | sha512sum | xxd -r -p | base64
示例:
BigQuery结果:
谷歌云 shell :
dy1byipe2#
你的Google BigQuery输出是base64编码的二进制哈希,而不是base64编码的十六进制哈希。一个简单的PHP脚本显示了BigQuery的来源。
输出量:
du7egjpx3#
sha512sum
不是OpenSSL;它是一个独立实用程序,通常是GNU coreutils的一部分。如果你想使用(或比较)OpenSSL:
还要注意的是,
echo -n
不能在Windows上工作,也不能在Unix或Unix shell的一些现在已经过时的版本上工作,而在一些Unix或shell上,echo
会修改包含一个或多个反斜杠的值(这当然会破坏你的哈希);printf %s 'Hello World'
保证在任何POSIX上都能正常工作。在Windows CMD上,您可以 * 执行set /p="Hello World" <NUL | ...
--但我们不要去那里。