Bash 对sha1sum的两个散列输出执行或

Bash 对sha1sum的两个散列输出执行或,bash,shell,hash,Bash,Shell,Hash,我希望使用bash执行sha1sumfile1和sha1sumfile2,并对它们执行按位OR操作。输出应可打印,即53a23bc2e24d039。。。(160位) 我该怎么做 我知道 echo$((0xa | 0xb))但如何扩展到40个十六进制数字 谢谢在我的机器上bash可以处理带符号64位值的固定宽度整数运算。这意味着,我可以一次按位或七个字节 一种选择是将校验和分成三部分,然后用它们来做OR。您可以稍后通过printf“%x”$val实现“可打印输出”。尝试以下方法: val1=$(s

我希望使用bash执行sha1sum
file1
和sha1sum
file2
,并对它们执行按位OR操作。输出应可打印,即53a23bc2e24d039。。。(160位)

我该怎么做

我知道

echo$((0xa | 0xb))但如何扩展到40个十六进制数字


谢谢在我的机器上bash可以处理带符号64位值的固定宽度整数运算。这意味着,我可以一次按位或七个字节

一种选择是将校验和分成三部分,然后用它们来做OR。您可以稍后通过
printf“%x”$val
实现“可打印输出”。

尝试以下方法:

val1=$(sha1sum file1)
val1=${val1% *}
val2=$(sha1sum file2)
val2=${val2% *}
val3=$(( 0x$val1 | 0x$val2 ))
printf "%x\n" $val3
你可以用gawk

sha1sum file1 file2 | awk '{sh1=$1;getline;sh2=$1;print or(sh1,sh2);exit}'

我不认为你真的想要一个包含160位的或,但如果你想要:

split32 () {
  x='s/\(........\)\(........\)\(........\)\(........\)\(........\)/'
  x=$x'0x\1 0x\2 0x\3 0x\4 0x\5/'
  sed -e "$x"
}

(sha1sum $1 | split32; sha1sum $2 | split32) | (
    read a1 b1 c1 d1 e1 x1
    read a2 b2 c2 d2 e2 x2
    a=$(($a1 | $a2))
    b=$(($b1 | $b2))
    c=$(($c1 | $c2))
    d=$(($d1 | $d2))
    e=$(($e1 | $e2))
    printf '  %08x%08x%08x%08x%08x\n' $a1 $b1 $c1 $d1 $e1
    printf '+ %08x%08x%08x%08x%08x\n' $a2 $b2 $c2 $d2 $e2
    printf '= %08x%08x%08x%08x%08x\n' $a  $b  $c  $d  $e 
)
$ bash bigOr.sh fun.tar fun.tgz
  e515d3813b17c36b9a7d29f7aea3e79e264449b7
+ 4f201513105c301944d0a0ba5864d9f07544ca76
= ef35d7933b5ff37bdefda9fffee7fffe7744cbf7

你为什么要这么做?如果我们知道你的目标更高,你可以得到更好的替代方案。按位或散列输出闻起来可能不是您真正想要的。基本上,使用Trusted Platform Module,PCR寄存器通过操作SHA-1(旧PCR值| indgest)进行扩展。PCR值和inDigest都是160位哈希输出。。我想在中国模仿这种行为software@idazuwaika:您读取的规格错误<代码>PCR:=SHA1(PCR | |数据)读取“将PCR的旧值与数据连接起来,对连接的字符串进行散列,并将散列存储在PCR中”。这不是
PCR:=PCR按位或SHA1(数据)
也不是
PCR:=SHA1(PCR按位或数据)
。我使用的是Mario Strasser的TPM emulator,在他的代码
TPM完整性中。c
如下所示。TPM|U结果TPM|U扩展(TPM|U PCRINDEX pcrNum,TPM|U DIGEST Indgest,TPM|U PCRVALUE*outDigest){…/计算新的PCR值作为SHA-1(旧PCR值| Indgest)/TPM|sha1_初始(&ctx);TPM|U sha1|U更新(&ctx,PCR|U值[pcrNum]。摘要,sizeof(PCR|U值[pcrNum]。摘要));TPM|sha1|U更新(&ctx,Indgest,DIGEST,sizeof(inDigest->digest));tpm_sha1_final(&ctx,PCR_VALUE[pcrNum].digest);/set output digest*/..}return tpm_SUCCESS;}是否遵循规范?在这种情况下,sha1sum的输出将被视为十六进制数字或字母数字字符吗?
的每个参数都需要像这样从十六进制转换为十进制:
或(strtonum(“0x”sh1)、strtonum(“0x”sh2))
,因为
sha1sum
的输出是十六进制的,没有前缀。但是,这些数字超过了
gawk
的容量(它使用浮点表示所有数字)。