2014-07-14 42 views
0

此問題,使用消息認證碼是真的離開我震驚HMAC_256在Solaris

  1. 以一個輸入文件,並使用私鑰
  2. 的Base64編碼HMAC_256哈希
從它創建一個HMAC_256值

代碼

#Create HMAC-SHA2 hash from shell parameter 
filehash=`echo $1 | mac -a sha256_hmac -k test.key` 
echo "HMAC_SHA256 hash : "$filehash 
#Base64 encode filehash using openssl 
filehash_64=`echo "$filehash" | /usr/sfw/bin//openssl enc -base64 | tr '\n' ' ' | cut -d " " -f2 ` 
echo "64 bit encoded hash : "$filehash_64 

使用的

一個test.key Bob123

殼牌輸入

你好

殼牌輸出

SHA256 hash : 411796cfb1e6c30c1b39b589c79d6f8bf1fdde8d58fda4a6ec1e59538ecaa39a 

64 bit encoded hash : ZWMxZTU5NTM4ZWNhYTM5YQo= 

但是如果我去這些網站,並做了HMAC_256測試它們都產生不同的散列

http://asecuritysite.com/encryption/hmac

http://jetcityorange.com/hmac/

他們兩個輸出的

一個HMAC_256哈希

a30410f584726f32ba3e6e823bfdecbdf28448d64e4ab8f11f6a2 e66818b50fe

他們爲什麼產生不同的散列?我假設他們是正確的,因爲他們都有相同的。

  • Solaris 10是否有MAC(消息認證碼) 工具的bug?
  • 它是UTF8還是ASCII碼問題?
  • 它是服務器問題,Windows/Unix?

我不明白爲什麼我爲他們生成不同的哈希值,即使我使用相同的哈希算法和密鑰。

+0

對於''filehash ='echo $ 1 | mac -a sha256_hmac -k test.key'','$ 1'可能應該引用:'「$ 1」'。並遵循[TheGreatContini](http://stackoverflow.com/a/24730605/445221)使用'-n'的建議。 – konsolebox

+0

它仍然是不同的,我試圖在Java中做一個等價的算法,它使一個完全不同的散列.... – kaleeway

+0

也許發佈,Java代碼也會有所幫助。 – konsolebox

回答

2

我猜猜問題是換行符。 echo命令在「Hello」之後放置一個換行符,所以如果你不需要它,可以使用「echo -n」。還要確保密鑰文件中沒有換行符。