我想在Linux上使用openssl
命令行程序來獲取文件的AES HMAC。我一直在看手冊頁,但無法弄清楚如何成功製作HMAC。我可以使用enc
命令與openssl
加密文件,但我似乎無法創建HMAC。加密如下所示:openssl hmac使用aes-256-cbc
openssl enc -aes-256-cbc -in plaintext -out ciphertext
任何意見或教程將是美好的
我想在Linux上使用openssl
命令行程序來獲取文件的AES HMAC。我一直在看手冊頁,但無法弄清楚如何成功製作HMAC。我可以使用enc
命令與openssl
加密文件,但我似乎無法創建HMAC。加密如下所示:openssl hmac使用aes-256-cbc
openssl enc -aes-256-cbc -in plaintext -out ciphertext
任何意見或教程將是美好的
你可能會問CBC-MAC。爲此,我認爲您只需用IV爲0加密您的消息或文件,然後取最後一個塊(AES256-cbc爲16個字節)。 I found a blog post描述如何使用OpenSSL的做到這一點:
openssl enc -e -aes-256-cbc -KABCDEF -iv 0000000000000000 < file | tail -c 16 | od -A n
-K
是你提供你的鑰匙,這wiki頁面說應該比你使用加密文件有什麼不同,如果你是根本加密它。-iv
顯然提供了一個全零的IV,這是CBC-MAC的關鍵。tail -c 16
用於獲取最後一個長度爲16個字節的AES256-cbc塊。od
是將其轉換爲十六進制,該網站說這是十分常見的。否則,而不是od -A n
如果更適用,您可以做base64
,或者完全保留原始字節。因爲AES256-CBC是塊密碼,而不是一個哈希算法你不能把一個文件的AES HMAC。 AES256-cbc用於加密和解密文件。 HMAC用於驗證文件的完整性,並在其核心(如SHA-1或MD5)上需要散列算法。
你想簽名或驗證一個文件,或加密它?要簽名,請查看OpenSSL dgst命令並使用簡單的HMAC(如MD5或SHA-1),或全力以赴並用DSS/DSA對其進行數字簽名。
此外,我相信使用分組密碼作爲MAC稱爲EMAC,但據我所知,OpenSSL不會執行EMAC。 EMAC只需要加密文件的最後一個塊並加密它以創建一個MAC。
您可以使用AES密鑰作爲HMAC的輸入來執行文件的HMAC。
使用您想要的任何AES算法對文件進行加密(在本例中爲-aes-256-cbc);根據密碼生成AES密鑰(將密碼更改爲「密碼」)並使用-p開關轉儲用於加密的鹽,密鑰和iv。
openssl enc -e -k password -p -aes-256-cbc -in plaintext -out ciphertext
salt=A2402067B9BFD4A1
key=EB3A88115C30F26C3987F1AB2577DF5B58C80EBEEA623506517FAD843C64E1FC
iv =B382453BCBF579CE14C0726D343F40E2
使用您所選擇的哈希算法和用於文件加密AES密鑰創建任何對象/文件的HMAC:
openssl dgst -hmac EB3A88115C30F26C3987F1AB2577DF5B58C80EBEEA623506517FAD843C64E1FC -sha256 ciphertext
HMAC-SHA256(ciphertext)= fa3fb9c9c743f35ba81793e2704c3fc9737cd2675011110cb1655ea7ceed2914
記住使用AES密鑰後,如果你需要驗證HMAC。請注意,我不知道您要完成什麼,但我不能聲稱上述內容符合您的加密要求,但它確實顯示瞭如何在HMAC計算中加密文件,獲取加密密鑰並使用該加密密鑰。
也許我在我原來的問題中錯過了;我需要AES密碼文本的MAC。這是否使更多的密碼意義?我相信AES的MAC只是最後一個加密塊,對嗎? – Ryan 2010-04-09 23:14:21
@Ryan:我在CBC-MAC上添加了一些信息。希望能幫助到你。如果這不是你的意思,也許你可以給出更多的背景知道爲什麼你需要計算這個AES MAC。這是一個衆所周知的協議的一部分嗎?一旦你計算它,你會怎麼做?更廣泛的背景信息可能有助於其他人跳入並提供答案。 – indiv 2010-04-10 01:14:23
這正是*我所需要的。非常感謝個人! – Ryan 2010-04-10 03:17:06