English 中文(简体)
Perform OR on two hash outputs of sha1sum
原标题:

I want perform sha1sum file1 and sha1sum file2 and perform bitwise OR operation with them using bash. Output should be printable i.e 53a23bc2e24d039 ... (160 bit)

How can I do this?

I know

echo $(( 0xa | 0xb )) but how to extend to 40 hexadecimal digits?

Thanks

问题回答

I don t think you really want a 160-bit inclusive OR, but if you do:

split32 () {
  x= s/(........)(........)(........)(........)(........)/ 
  x=$x 0x1 0x2 0x3 0x4 0x5/ 
  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
  $a1 $b1 $c1 $d1 $e1
    printf  + %08x%08x%08x%08x%08x
  $a2 $b2 $c2 $d2 $e2
    printf  = %08x%08x%08x%08x%08x
  $a  $b  $c  $d  $e 
)
$ bash bigOr.sh fun.tar fun.tgz
  e515d3813b17c36b9a7d29f7aea3e79e264449b7
+ 4f201513105c301944d0a0ba5864d9f07544ca76
= ef35d7933b5ff37bdefda9fffee7fffe7744cbf7

Try this:

val1=$(sha1sum file1)
val1=${val1% *}
val2=$(sha1sum file2)
val2=${val2% *}
val3=$(( 0x$val1 | 0x$val2 ))
printf "%x
" $val3

On my machine bash can handle fixed width integer arithmetic with signed 64 bit values. This means, I can bitwise OR seven bytes at once.

One option would be splitting up your checksum in three pieces an do your OR with these. You can achieve "printable output" by printf "%x" $val later on.

you can use gawk

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




相关问题
Parse players currently in lobby

I m attempting to write a bash script to parse out the following log file and give me a list of CURRENT players in the room (so ignoring players that left, but including players that may have rejoined)...

encoding of file shell script

How can I check the file encoding in a shell script? I need to know if a file is encoded in utf-8 or iso-8859-1. Thanks

Bash usage of vi or emacs

From a programming standpoint, when you set the bash shell to use vi or emacs via set -o vi or set -o emacs What is actually going on here? I ve been reading a book where it claims the bash shell ...

Dynamically building a command in bash

I am construcing a command in bash dynamically. This works fine: COMMAND="java myclass" ${COMMAND} Now I want to dynamically construct a command that redirectes the output: LOG=">> myfile.log ...

Perform OR on two hash outputs of sha1sum

I want perform sha1sum file1 and sha1sum file2 and perform bitwise OR operation with them using bash. Output should be printable i.e 53a23bc2e24d039 ... (160 bit) How can I do this? I know echo $(( ...

Set screen-title from shellscript

Is it possible to set the Screen Title using a shell script? I thought about something like sending the key commands ctrl+A shift-A Name enter I searched for about an hour on how to emulate ...

热门标签