使用OpenSSL哈希进行文件比较

时间:2012-03-17 04:40:47

标签: linux bash openssl

不确定为什么会失败..

./testme.sh
Before Loop
SSL1: /root/a.txt SHA256(/root/a.txt)= 92b165232fbd011da355eca0b033db22b934ba9af0145a437a832d27310b89f9
SSL2: /root/b.txt SHA256(/root/b.txt)= f0f9c277cf17429957daf6594714cc5470ac5c474ba5ac50319185477a174799
different


cp a.txt b.txt
./testme.sh
Before Loop
SSL1: /root/a.txt SHA256(/root/a.txt)= 92b165232fbd011da355eca0b033db22b934ba9af0145a437a832d27310b89f9
SSL2: /root/b.txt SHA256(/root/b.txt)= 92b165232fbd011da355eca0b033db22b934ba9af0145a437a832d27310b89f9
different

校验和,但相同,但报告不同:|

#!/bin/bash
#
# OPENSSL=/usr/bin/openssl
OPENSSL=/usr/local/openssl/bin/openssl
HOME=/root
ENCRYPT=sha256

SSL1=$($OPENSSL $ENCRYPT $HOME/a.txt)
SSL2=$($OPENSSL $ENCRYPT $HOME/b.txt)

## DEBUG
echo "SSL1: $HOME/a.txt $SSL1"
echo "SSL2: $HOME/b.txt $SSL2"


if [ "$SSL1" = "$SSL2" ]
 then
  echo "same"
 else
  echo "different"
fi

3 个答案:

答案 0 :(得分:2)

我今天正在努力解决这个问题。这是在OSX上测试的单线程

diff  <(openssl sha1 index.css | awk {'print $2'}) <(openssl sha1 original_source/index.css | awk {'print $2'})

成功时没有输出;输出两个哈希失败。

答案 1 :(得分:0)

仔细观察。结果包括文件名。

答案 2 :(得分:0)

$SSL1不仅包含文件的哈希值;它还包含字符串SHA256(/root/a.txt)=,其中包含文件名。同样适用于$SSL2。所以很自然,它们并不相同,因为它们包含不同的文件名。

要获取 哈希值,您可以采取一些方法。我认为最简单的只是将其传递给grep

SSL1=$($OPENSSL $ENCRYPT $HOME/a.txt | grep -o '[0-9a-f]*$')
SSL2=$($OPENSSL $ENCRYPT $HOME/b.txt | grep -o '[0-9a-f]*$')