首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对sha1sum的两个散列输出执行OR操作

对sha1sum的两个散列输出执行OR操作
EN

Stack Overflow用户
提问于 2009-11-10 18:36:05
回答 4查看 795关注 0票数 1

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

我该怎么做呢?

我知道呀

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

谢谢

EN

回答 4

Stack Overflow用户

发布于 2009-11-10 19:26:07

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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2009-11-10 19:04:06

试试这个:

代码语言:javascript
复制
val1=$(sha1sum file1)
val1=${val1% *}
val2=$(sha1sum file2)
val2=${val2% *}
val3=$(( 0x$val1 | 0x$val2 ))
printf "%x\n" $val3
票数 1
EN

Stack Overflow用户

发布于 2009-11-10 19:00:28

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

一种选择是将校验和分成三部分,然后用这些部分进行OR运算。稍后,您可以通过printf "%x" $val实现“可打印输出”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1706999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档